时间:2021-07-01 10:21:17 帮助过:12人阅读
php魔术方法__autoload(),有需要的朋友可以参考下。 __autoload()方法是一个特殊函数,它不是一个类方法,而是单独的函数,在类外被声明,将在实例化一个还没被声明的类中调用。
这样写就会出现一个问题,当在条件B下实例化B类时,其实是不需要引用A,C文件的,所以栗子中的做法就会浪费一部分资源去编译A,C两个“无用的类”;所以这时候我们就可以使用__autoload()函数来解决这个问题。
当php引擎第一次使用类A,但是找不到时,会自动调用__autoload方法,并将类名“A”作为参数传入。所以,我们需要的做的就是根据类名,找到对应的文件,并包含进来,如果我们的方法也找不到,那么php引擎就会报错。注意,这里可以只用require,因为一旦包含进来后,php引擎再遇到类A时,将不会调用__autoload,而是直接使用内存中的类A,不会导致多次包含。 现在讲一下autoload的运行机制,PHP在实例化一个对象时(实际上在实现接口,使用类常数或类中的静态变量,调用类中的静态方法时都会如此),首先会在系统中查找该类(或接口)是否存在,如果不存在的话就尝试使用autoload机制来加载该类。而autoload机制的主要执行过程为: (1) 检查执行器全局变量函数指针autoload_func是否为NULL。 |