php魔术方法__autoload()
来源:互联网 发布:办公室office软件下载 编辑:程序博客网 时间:2024/05/16 01:26
__autoload()方法是一个特殊函数,它不是一个类方法,而是单独的函数,在类外被声明,将在实例化一个还没被声明的类中调用。
举个栗子:
require_once('test/A.php'); require_once('test/B.php'); require_once('test/C.php'); if (条件A) { $a = new A(); $b = new B(); $c = new C(); } else if (条件B) { $a = newA(); $b = new B(); }
这样写就会出现一个问题,当在条件B下实例化B类时,其实是不需要引用A,C文件的,所以栗子中的做法就会浪费一部分资源去编译A,C两个“无用的类”;所以这时候我们就可以使用__autoload()函数来解决这个问题。
function __autoload($className) { $filePath = “test/{$className}.php”; if (is_readable($filePath)) { require($filePath); } } if (条件A) { $a = new A(); $b = new B(); $c = new C(); } else if (条件B) { $a = newA(); $b = new B(); }
当php引擎第一次使用类A,但是找不到时,会自动调用__autoload方法,并将类名“A”作为参数传入。所以,我们需要的做的就是根据类名,找到对应的文件,并包含进来,如果我们的方法也找不到,那么php引擎就会报错。注意,这里可以只用require,因为一旦包含进来后,php引擎再遇到类A时,将不会调用__autoload,而是直接使用内存中的类A,不会导致多次包含。
现在讲一下autoload的运行机制,PHP在实例化一个对象时(实际上在实现接口,使用类常数或类中的静态变量,调用类中的静态方法时都会如此),首先会在系统中查找该类(或接口)是否存在,如果不存在的话就尝试使用autoload机制来加载该类。而autoload机制的主要执行过程为:
(1) 检查执行器全局变量函数指针autoload_func是否为NULL。
(2) 如果autoload_func==NULL, 则查找系统中是否定义有__autoload()函数,如果没有,则报告错误并退出。
(3) 如果定义了__autoload()函数,则执行__autoload()尝试加载类,并返回加载结果。
(4) 如果autoload_func不为NULL,则直接执行autoload_func指针指向的函数用来加载类。此时并不检查__autoload()函数是否定义。
- php魔术方法__autoload()
- php魔术方法__autoload()
- php魔术函数__autoload
- PHP中用魔术方法__autoload()实现类的自动加载
- PHP | 魔术方法 | __toString(),__clone(),__call(),__autoload() 详解
- PHP魔术函数__autoload机制介绍
- PHP __autoload()方法详解
- php中__autoload()方法详解
- 魔术方法(__toString()+ __call()+ __clone() +__autoload())+单例模式
- 面向对象 魔术方法 __clone() __toString() __call() __autoload()
- php魔术常量,魔术方法
- php的魔术方法
- php魔术方法
- PHP中的魔术方法
- php魔术方法
- php的魔术方法
- PHP魔术方法
- php 魔术方法使用说明
- Android-PullLayout:仿UC天气下拉和微信下拉眼睛头部淡入淡出
- nyoj 104 最大和 【区间dp】
- 通达OA-如何集成其他系统的单据
- UML之实现图
- 【Linux运维入门】windows环境下操作Linux的两大利器-Xshell & WinSCP
- php魔术方法__autoload()
- 实现截屏功能
- Android-SQLite3_3-如何使用SQLite in Android
- nyoj 49 开心的小明 【dp&&贪心】
- Markdown
- java数据结构代码记录---归并排序代码
- Cocos2D iOS之旅:如何写一个敲地鼠游戏(一):高清屏显示和UIKit
- Vs解决方案的目录结构设置和管理
- ActionBar相关设置与操作