企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 自动加载 TookPHP基本上无需手动加载类库文件,你可以很方便的完成自动加载。 ### 命名空间自动加载 系统可以通过类的命名空间自动定位到类库文件,例如: 我们定义了一个类 `Util\Pay\Alipay` 类: ~~~ namespace Util\Pay; class Alipay { } ~~~ 保存到 `Common/Library/Util/Alipay.class.php`。 接下来,我们就可以直接实例化了。 ~~~ new \Util\Pay\Alipay(); ~~~ 在实例化`Util\Pay\Alipay`类的时候,系统会自动加载 `Application/Common/Library/Util/Pay/Alipay.class.php` 文件。 ~~~ namespace Util\Pay; class Alipay{ } ~~~ 框架的`Library`目录下面的命名空间都可以自动识别和定位,例如: ~~~ ├─Application 应用目录 │ ├─Common Common公共目录 │ ├─Library 公共目录类库目录 │ ├─Util Util类库包目录 │ ├─Org Org类库包目录 │ ├─... 更多类库目录 ~~~ ~~~ ├─tookphp 框架类库目录 │ ├─Library 框架类库目录 │ ├─Took 核心类库包目录 │ ├─Tool 工具类库包目录 │ ├─Org Org类库包目录 │ ├─... 更多类库目录 ~~~ ~~~ new Took\Cache\Driver\File(); new Org\PHPExcel\PHPExcel(); new Util\Pay\Alipay(); ~~~ 都可以自动加载对应的类库文件。 ### 注册命名空间 你可以在`Library`目录下面任意增加新的目录,就会自动注册成为一个新的根命名空间。 我们还可以注册其他的根命名空间,例如: ~~~ 'APP_AUTOLOAD_NAMESPACE' => array( 'Util' => APP_COMMON_PATH.'Library/Util/' 'My' => APP_COMMON_PATH.'Library/My/' ) ~~~ 配置了上面的`APP_AUTOLOAD_NAMESPACE`后,如果我们实例化下面的类库 ~~~ new My\Net\IpLocation(); new Util\Log\Log(); ~~~ 会自动加载对应的类库文件 ~~~ Common/Library/My/Net/IpLocation.class.php Common/Library/Util/Log/Log.class.php ~~~ 如果命名空间不在`Library`目录下面,并且没有定义对应的`APP_AUTOLOAD_NAMESPACE`参数的话,则会当作模块的命名空间进行自动加载,例如: ~~~ new Home\Model\UserModel() new Home\Event\UserEvent(); ~~~ 由于`TookPHP/Library`目录下面不存在Home目录,也没在`APP_AUTOLOAD_NAMESPACE`参数定义`Home`命名空间,所以就把`Home`当成模块命名空间来识别,所以会自动加载: ~~~ Application/Home/Model/UserModel.class.php Application/Home/Event/UserEvent.class.php ~~~ 注意:命名空间的大小写需要和目录名的大小写对应,否则可能会自动加载失败。 ### 路径自动加载 定义类库自动搜索路径自动加载 可以通过配置 `APP_AUTOLOAD_PATH` 参数(自动加载路径)来实现所需类库的自动加载。 //配置多个搜索路径之间用逗号分割,并且注意定义的顺序代表了搜索的顺序。 ~~~ // APP_AUTOLOAD_PATH 配置实例如下: //'APP_AUTOLOAD_PATH' => 'Common.Model', 'APP_AUTOLOAD_PATH' => 'Common.Model,Common.Library,@.Library', //注: @表示当前模块下 ~~~ 需要注意的是,自动加载的类库文件命名必须是以 .class.php 为后缀的。