use和__autoload以及spl_autoload_register的作用?

初学php有一些概念不是很明白,下面是一些我的理解:
1 . __autoload魔术方法在实例化未导入的类时被调用(就是一个回调函数),在这个函数中可以实现对类文件的包含(require);
2 . __autoload起的作用和require以及include是相似的,只是实现形式不同;
3 . spl_autoload_register 注册给定的函数作为 __autoload 的实现;

这些理解有问题么?

我在写php代码的时候一般使用use关键字导入要使用的类(和java、c#类似)既然可以使用use这种简单的方式实现类的导入,为啥还要有上面这么多不同的方式来实现呢?而且明显use用起来更加简单、方便。是为了反射场景么?

largeQ
浏览 724回答 5
5回答

慕码人8056858

use是引入要使用的命名空间,方便实现同项目同类名的区分。真正能使用类本身的需要require/include类所在的文件,而__autoload和spl_autoload_register所做的事情是能够实现自动化引入文件等等。

慕桂英3389331

use 是引入命名空间 ,使用前 得把需要的类文件引入。 __autoload 函数可以自动引入你要使用的类文件简单的例子像这样 function __autoload( $classname ) { include_once( "$classname.php" ); } $product = new ShopProduct(); 可以引用类。__autoload 只可以定义一次,如果需要多条 autoload 就可以使用spl_autoload_register

拉风的咖菲猫

use是引入命名空间,自动加载是按需加载,php是解释型语言,每次请求进来都需要重新加载文件,这是主要因素。

BIG阳

其实还有一点问题,要仔细去看一下文档说明.以上都是对的.我这里只说上面没有说到的.注册__autoload函数,只是注册一个加载函数.这个修改了php底层的加载模式.为了不修改底层的加载模式,php提出一种新的加载方式,spl_autoload_register.这个是一个函数队列,如果理解队列呢.就是从上往下找,直到找到为止.具体的来说,就是 * __autoload会改变底层的加载模式,而spl_autoload_register不会. * spl_autoload_register是一个加载队列,如果需要多条 autoload 函数,spl_autoload_register满足了此类需求 详细的请查看一下官方文档.

慕丝7291255

参考:PHP 自动加载 深度总结
打开App,查看更多内容
随时随地看视频慕课网APP