如何写一个属于自己的数据库封装(10) - 自动载入篇

上一期 如何写一个属于自己的数据库封装(9) - DELETE篇
下一期 如何写一个属于自己的数据库封装(11) - 关联关系篇

本期要点

PHP:spl_autoload_register - Manual

开始之前

requireinclude 是每一个 PHPER 都明白的操作,
没有一个正常的程序员会写出上千行一页的代码然后为之自豪
合理地将类和代码逻辑区分到不同的 PHP 文件, 再以模块的方式调用, 这才是正确的码字方式(至少我是这么认为的), 也方便后来的人维护更新(满满的怨念)

项目逐渐成长, 一个后台功能需要调用的模块越多, require 可能已经成了累人的事

重复性的代码逻辑必须以函数或类来取代

require 也一样, 一个大型项目可能需要 require 十数个的 类文件, 这时候就应该使用 PHP 自带的魔术函数来实现自动载入类了

在啰嗦也必须再三强调, 规范 是项目茁壮成长的唯一法则, 统一代码和文件的命名规范, 文件树的逻辑归类, 这些都很重要(不堪回首)

spl_autoload_register

如果在你的程序中已经实现了__autoload()函数,它必须显式注册到__autoload()队列中。因为 spl_autoload_register()函数会将Zend Engine中的__autoload()函数取代为spl_autoload()或spl_autoload_call()。

这是来自 PHP 官方文档的一句话, __autoload 函数将被取代, 请注意

进入代码之前先展示一下我的项目文件夹结构

  • root => 项目根目录
    • lib => 数据库封装所在文件夹
      • Builder.php
      • Connector.php
      • Grammar.php
      • helper.php
      • Model.php
    • model => 已绑定的数据库表模型
      • Actor.php
      • Film.php
      • FilmActor.php
      • Language.php
      • more...

新建一个文件, 命名为autoload.php

autoload.php

 数据库封装的源代码
    // model => 已绑定的数据库表模型
    $paths = ['lib', 'model'];

    // 根目录
    $root = dirname(__DIR__);

    // 循环预设需搜索的两个文件夹, 如果存在文件那就载入
    foreach ($paths as $path) {
        if(is_file("$root/$path/$class.php"))
            require "$root/$path/$class.php";
    }
});

就这么简单
然后每回只需 require 一个文件就足够了

例子

take(10)->get();

dd($a);

完整代码

源代码放在coding.net里, 自己领

上一期 如何写一个属于自己的数据库封装(9) - DELETE篇
下一期 如何写一个属于自己的数据库封装(11) - 关联关系篇

你可能感兴趣的:(如何写一个属于自己的数据库封装(10) - 自动载入篇)