使用composer自动加载php命名空间
介绍了php的命名空间,但是每次都要使用一个spl_autoload_register()或autoload()方法,每个要使用命名空间的地方都要加这个方法太麻烦,有没有简单的方法呢?有,可以使用composer自动加载命名空间。
要在php项目中使用包依赖管理工具composer首先得安装,这个自行搜索,就不多说了。安装之后再项目根目录下创建一个
composer.json文件。
目录结构如图所示:
composer.json相当于是composer的配置文件
composer.json
[code]{ "require": { "monolog/monolog": "1.0.*" }, "autoload": { "psr-4": { "App\\": "app/", "Space\\": "space/", "Time\\": "time/" } } }
这个配置文件中有一个autoload段,其中有个psr-4,psr-4是一个基于psr-4(http://www.php-fig.org/psr/psr-4/)规则的类库自动加载对应关系,只要在其后的对象中,以 “命名空间”: “路径” 的方式写入自己的类库信息即可。
修改完成后,只要执行一下composer update,即可完成对应工作。
然后,在项目中就可以这样加载自定义类库了:
[code]new \Space\Tree();
此外在项目的入口文件中需要加入:
require_once __DIR__.'/vendor/autoload.php';
如我的项目的入口文件index.php:
[code]<?php namespace socket; require_once __DIR__.'/vendor/autoload.php'; $tree = new \Space\Tree(); //这是使用的space/Tree.php中的类Tree $tree->leaves(); $trees = new \Time\Tree(); //这是使用的time/Tree.php中的类Tree $trees->leaves();
space/Tree.php
[code]<?php namespace Space; echo '<BR>Space'; class Tree { public function leaves($value='') { echo '<BR>Space leaves'; } }//end class
time/Tree.php
[code]<?php namespace Time; echo '<BR>Time'; class Tree { public function leaves($value='') { echo '<BR>Time leaves'; } }//end class
运行结果如图所示:
其实,一个文件中可以有多个命名空间,如:
space/Tree.php
[code]<?php namespace Space; echo '<BR>Space'; class Tree { public function leaves($value='') { echo '<BR>Space leaves'; } }//end class namespace Space1; // Space1 命名空间中的PHP代码 class Tree { public function leaves($value='') { echo 'Space leaves 01'; } }//end class namespace Space2; // Space2 命名空间中的PHP代码 class Tree { public function leaves($value='') { echo 'Space leaves 02'; } }//end class
[code]注:命名空间的名字最好跟目录路径对应,因为php是把命名空间转换为了路径去查找类库的。
结束语
该文简单介绍了自动加载以及命名空间的使用,实际开发中,我们很少去关注autoload自动加载的问题,因为大多数现代PHP框架都已经处理好了文件自动加载的问题。开发者只需关注业务代码,使用规范的命名空间就可以了。当然,如果你想自己开发个项目不依赖大型框架亦或者自己开发php框架,那你就得熟悉下autoload自动加载这个好东西了,毕竟它可以让我们“偷懒”,省事多了。
现代php里,我们经常使用 Composer 方式安装的组件,都可以通过autoload实现自动加载,所以还是一个“懒”字给我们带来了极好的开发效率
阅读更多
- PHP命名空间自动加载之composer实现方式
- PHP 使用命名空间(namespace),实现自动加载
- php命名空间与自动加载函数一起使用
- php命名空间自动加载后使用单独类include使用
- 【干货】PHP命名空间和自动加载类
- 慕课网----大话PHP设计模式 一(命名空间,类的自动加载,PSR-0)
- PHP面向对象程序设计之命名空间与自动加载类详解
- PHP命名空间和自动加载类
- PHP中的use、命名空间、引入类文件、自动加载类的理解
- 关于Thinkphp3.2 命名空间的说明-php5.3命名空间介绍-TP自动加载
- thinkphp3.2开发排错一例——没有使用命名空间导致没有自动加载类进而导致Class not found
- 命名空间及自动加载函数的使用
- PHP中的use、命名空间、引入类文件、自动加载类的理解
- PHP 命名空间与自动加载
- 【php】命名空间 和 自动加载的关系
- 【php】命名空间 和 自动加载的关系
- 一张图告诉你php的命名空间和自动加载
- PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
- PHP的命名空间 与类是自动加载
- PHP命名空间和自动加载类