🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
ThinkPHP的类库主要包括公共类库和应用类库,都是基于命名空间进行定义和扩展的。只要按照规范定义,都可以实现自动加载。 ### 公共类库 公共类库通常是指`ThinkPHP/Library`目录下面的类库,例如: ~~~ ~~~ Think目录:系统核心类库 Org目录:第三方公共类库 ~~~ ~~~ 这些目录下面的类库都可以自动加载,你只要把相应的类库放入目录中,然后添加或者修改命名空间定义。 你可以在Org/Util/目录下面添加一个Image.class.php 文件,然后添加命名空间如下: ~~~ ~~~ namespace Org\Util; class Image { } ~~~ ~~~ 这样,就可以用下面的方式直接实例化Image类了: ~~~ ~~~ $image = new \Org\Util\Image; ~~~ ~~~ 除了这些目录之外,你完全可以在`ThinkPHP/Library`目录下面添加自己的类库目录,例如,我们添加一个Com目录用于企业类库扩展: Com\Sina\App类(位于Com/Sina/App.class.php ) ~~~ ~~~ namespace Com\Sina; class App { } ~~~ ~~~ Com\Sina\Rank类(位于Com/Sina/Rank.class.php) ~~~ ~~~ namespace Com\Sina; class Rank { } ~~~ ~~~ 公共类库除了在系统的Library目录之外,还可以自定义其他的命名空间,我们只需要注册一个新的命名空间,在应用或者模块配置文件中添加下面的设置参数: ~~~ ~~~ 'AUTOLOAD_NAMESPACE' => array( 'Lib' => APP_PATH.'Lib', ) ~~~ ~~~ 我们在应用目录下面创建了一个Lib目录用于放置公共的Lib扩展,如果我们要把上面两个类库放到Lib\Sina目录下面,只需要调整为: Lib\Sina\App类(位于Lib/Sina/App.class.php ) ~~~ ~~~ namespace Lib\Sina; class App { } ~~~ ~~~ Lib\Sina\Rank类(位于Lib/Sina/Rank.class.php) ~~~ ~~~ namespace Lib\Sina; class Rank { } ~~~ ~~~ 如果你的类库没有采用命名空间的话,需要使用import方法先加载类库文件,然后再进行实例化,例如: 我们定义了一个Counter类(位于Com/Sina/Util/Counter.class.php): ~~~ ~~~ class Counter { } ~~~ ~~~ 在使用的时候,需要按下面方式调用: ~~~ ~~~ import('Com.Sina.Util.Couter'); $object = new \Counter(); ~~~ ~~~ ### 应用类库 应用类库通常是在应用或者模块目录下面的类库,应用类库的命名空间一般就是模块的名称为根命名空间,例如: Home\Model\UserModel类(位于Application\Home\Model) ~~~ ~~~ namespace Home\Model; use Think\Model; class UserModel extends Model{ } ~~~ ~~~ Common\Util\Pay类(位于Application\Common\Util) ~~~ ~~~ namespace Common\Util; class Pay { } ~~~ ~~~ Admin\Api\UserApi类(位于Application\Admin\Api) ~~~ ~~~ namespace Admin\Api; use Think\Model; class UserApi extends Model{ } ~~~ ~~~ > 记住一个原则,命名空间的路径和实际的文件路径对应的话 就可以实现直接实例化的时候自动加载。