初学php有一些概念不是很明白,下面是一些我的理解:1 . __autoload魔术方法在实例化未导入的类时被调用(就是一个回调函数),在这个函数中可以实现对类文件的包含(require);2 . __autoload起的作用和require以及include是相似的,只是实现形式不同;3 . spl_autoload_register 注册给定的函数作为 __autoload 的实现;
这些理解有问题么?
我在写php代码的时候一般使用use关键字导入要使用的类(和java、c#类似)既然可以使用use这种简单的方式实现类的导入,为啥还要有上面这么多不同的方式来实现呢?而且明显use用起来更加简单、方便。是为了反射场景么?
5 回答
![?](http://img1.sycdn.imooc.com/5458692c00014e9b02200220-100-100.jpg)
慕码人8056858
TA贡献1803条经验 获得超6个赞
use
是引入要使用的命名空间,方便实现同项目同类名的区分。真正能使用类本身的需要require
/include
类所在的文件,而__autoload
和spl_autoload_register
所做的事情是能够实现自动化引入文件等等。
![?](http://img1.sycdn.imooc.com/545865890001495702200220-100-100.jpg)
慕桂英3389331
TA贡献2036条经验 获得超8个赞
use 是引入命名空间 ,使用前 得把需要的类文件引入。
__autoload 函数可以自动引入你要使用的类文件
简单的例子像这样
function __autoload( $classname ) {
include_once( "$classname.php" );
}
$product = new ShopProduct();
可以引用类。__autoload 只可以定义一次,如果需要多条 autoload 就可以使用spl_autoload_register
![?](http://img1.sycdn.imooc.com/5333a1920001d36402200220-100-100.jpg)
BIG阳
TA贡献1859条经验 获得超6个赞
其实还有一点问题,要仔细去看一下文档说明.以上都是对的.我这里只说上面没有说到的.
注册__autoload函数,只是注册一个加载函数.这个修改了php底层的加载模式.为了不修改底层的加载模式,php提出一种新的加载方式,spl_autoload_register.这个是一个函数队列,如果理解队列呢.就是从上往下找,直到找到为止.具体的来说,就是
* __autoload会改变底层的加载模式,而spl_autoload_register不会.
* spl_autoload_register是一个加载队列,如果需要多条 autoload 函数,spl_autoload_register满足了此类需求
详细的请查看一下官方文档.
- 5 回答
- 0 关注
- 802 浏览
添加回答
举报
0/150
提交
取消