百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>网页制作> PHP中__autoload()魔术办法详解
分享文章到:

PHP中__autoload()魔术办法详解

发布时间:09/01 来源:未知 浏览: 关键词:
__autoload(),尝试加载不决义的类

作用:

你可以通过定义这个函数来启用类的主动加载。

在魔术函数 __autoload() 办法显现之前,假如你要在一个程叙文件中实例化100个对象,那么你必需用include或者require包括进来100个类文件,或者你把这100个类定义在统一个类文件中 —— 信赖这个文件必然会非常大,然后你就疾苦了。

但是有了 __autoload() 办法,今后就不必为此大伤脑筋了,这个类会在你实例化对象此前主动加载拟定的文件。

还是通过例子来看看吧:

先看看以往的方式:

/** 
 * 文件non_autoload.php 
 */ 
   
require_once('project/class/A.php');  
require_once('project/class/B.php');  
require_once('project/class/C.php');  
   
if (前提A) {  
    $a = new A();  
    $b = new B();  
    $c = new C();  
    // … 业务逻辑  
} else if (前提B) {  
    $a = newA();  
    $b = new B();  
    // … 业务逻辑  
}

看到了吗?不消100个,只是3个看起来就有点烦了。并且这样就会有一个问题:假如足本施行“前提B”这个分支时,C.php这个文件其实没有必要包括。由于,任何一个被包括的文件,不管可否使用,均会被php引擎编译。

假如不使用,却被编译,这样可以被视作一种资源白费。更进一步,假如C.php包括了D.php,D.php包括了E.php。并且大部分状况都施行“前提B”分支,那么就会白费一部分资源去编译C.php,D.php,E.php三个“无用”的文件。

那么假如使用 __autoload() 方式呢?

/** 
 * 文件autoload_demo.php 
 */ 
function  __autoload($className) {  
    $filePath = “project/class/{$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();  
    // … 业务逻辑  
}

ok,不管效力如何用,最起码界面看起来舒适多了,没有太多冗余的代。

再来看看这里的效力怎样,我们剖析下:

当php引擎第一次使用类A,但是寻不到时,会主动调取 __autoload 办法,并将类名“A”作为参数传入。所以,我们在 __autoload() 中需要的做的就是按照类名,寻到响应的文件,并包括进来,假如我们的办法也寻不到,那么php引擎就会报错了。

留意:

这里可以只用require,由于一旦包括进来后,php引擎再碰到类A时,将不会调取__autoload,而是直接使用内存中的类A,不会致使屡次包括。

扩展:

其实php开展到今天,已经有将 `spl_autoload_register` — 注册给定的函数作为 __autoload 的实现了,但是这个不在啊本文讲解之内,有乐趣可以自行看手册。

以上就是PHP中__autoload()魔术办法详解的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有150人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板