深入理解PHP类的自动载入机制


Posted in PHP onSeptember 16, 2016

php的自动加载:

在php5以前,我们要用某个类或类的方法,那必须include或者require,之后才能使用,每次用一个类,都需要写一条include,麻烦

php作者想简单点,最好能引用一个类时,如果当前没有include进来,系统能自动去找到该类,自动引进~

于是:__autoload()函数应运而生。

通常放在应用程序入口类里面,比如discuz中,放在class_core.php中。

先讲浅显的例子:

第一种情况:文件A.php中内容如下

<?php

class A{

public function __construct(){

    echo 'fff';

}

}

?>

文件C.php 中内容如下:

<?php  
function __autoload($class)  
{  
$file = $class . '.php';  
if (is_file($file)) {  
require_once($file);  
}  
}  
$a = new A(); //这边会自动调用__autoload,引入A.php文件

?>

第二种情况:有时我希望能自定义autoload,并且希望起一个更酷的名字loader,则C.php改为如下:

<?php
function loader($class)
{
$file = $class . '.php';
if (is_file($file)) {
require_once($file);
}
}

spl_autoload_register('loader'); //注册一个自动加载方法,覆盖原有的__autoload

$a = new A();

?>

第三种情况:我希望高大上一点,用一个类来管理自动加载

<?php  
class Loader  
{  
public static function loadClass($class)  
{  
$file = $class . '.php';  
if (is_file($file)) {  
require_once($file);  
}  
}  
}  

spl_autoload_register(array('Loader', 'loadClass'));  

$a = new A();

?>

当前为最佳形式。

通常我们将spl_autoload_register(*)放在入口脚本,即一开始就引用进来。比如下面discuz的做法。

if(function_exist('spl_autoload_register')){

spl_autoload_register(array('core','autoload')); //如果是php5以上,存在注册函数,则注册自己写的core类中的autoload为自动加载函数

}else{

function __autoload($class){     //如果不是,则重写php原生函数__autoload函数,让其调用自己的core中函数。

return core::autoload($class);

}

}

这段扔在入口文件最前面,自然是极好的~

以上这篇深入理解PHP类的自动载入机制就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
JS与PHP向函数传递可变参数的区别实例代码
May 18 PHP
CodeIgniter上传图片成功的全部过程分享
Aug 12 PHP
一个经典的PHP验证码类分享
Nov 18 PHP
PHP调用MySQL存储过程并返回值的方法
Dec 26 PHP
浅析PHP关键词替换的类(避免重复替换,保留与还原原始链接)
Sep 22 PHP
PHP使用file_get_content设置头信息的方法
Feb 14 PHP
浅谈PHP值mysql操作类
Jun 29 PHP
PHP 读取大文件并显示的简单实例(推荐)
Aug 12 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
Feb 23 PHP
PHP连接MySQL数据库并以json格式输出
May 21 PHP
PHP中str_split()函数的用法讲解
Apr 11 PHP
laravel自定义分页的实现案例offset()和limit()
Oct 15 PHP
PHP实现链式操作的原理详解
Sep 16 #PHP
详解PHP中websocket的使用方法
Sep 15 #PHP
PHP简单实现上一页下一页功能示例
Sep 14 #PHP
PHP自定义函数格式化json数据示例
Sep 14 #PHP
ThinkPHP中session函数详解
Sep 14 #PHP
PHP大神的十大优良习惯
Sep 14 #PHP
thinkPHP的表达式查询用法详解
Sep 14 #PHP
You might like
PHP 第二节 数据类型之数组
2012/04/28 PHP
php 读取文件头判断文件类型的实现代码
2013/08/05 PHP
thinkPHP2.1自定义标签库的导入方法详解
2016/07/20 PHP
PHP设计模式之模板模式定义与用法详解
2018/12/20 PHP
filemanage功能中用到的common.js
2007/04/08 Javascript
javascript 表单的友好用户体现
2009/01/07 Javascript
jQuery.Validate 使用笔记(jQuery Validation范例 )
2010/06/25 Javascript
jQuery Mobile页面跳转后未加载外部JS原因分析及解决
2013/03/18 Javascript
JSON序列化与解析原生JS方法且IE6和chrome测试通过
2013/09/05 Javascript
showModelDialog弹出文件下载窗口的使用示例
2013/11/19 Javascript
js换图片效果可进行定时操作
2014/06/09 Javascript
通过js为元素添加多项样式,浏览器全兼容写法
2014/08/30 Javascript
如何解决easyui自定义标签 datagrid edit combobox 手动输入保存不上
2015/12/26 Javascript
jQuery实现点击下拉框中的值累加到文本框中的方法示例
2017/10/28 jQuery
对vue中methods互相调用的方法详解
2018/08/30 Javascript
elementUi vue el-radio 监听选中变化的实例代码
2019/06/28 Javascript
JavaScript实现图片伪异步上传过程解析
2020/04/10 Javascript
浅谈python中scipy.misc.logsumexp函数的运用场景
2016/06/23 Python
python2.7 json 转换日期的处理的示例
2018/03/07 Python
python看某个模块的版本方法
2018/10/16 Python
pandas数据筛选和csv操作的实现方法
2019/07/02 Python
使用tensorflow实现VGG网络,训练mnist数据集方式
2020/05/26 Python
浅谈keras中的keras.utils.to_categorical用法
2020/07/02 Python
如何在python中实现线性回归
2020/08/10 Python
python产生模拟数据faker库的使用详解
2020/11/04 Python
python上下文管理器异常问题解决方法
2021/02/07 Python
经济学人订阅:The Economist
2018/07/19 全球购物
信息专业个人的自我评价
2013/12/27 职场文书
投标担保书范文
2014/04/02 职场文书
安全协议书范本
2014/04/21 职场文书
奥巴马英文演讲稿
2014/05/15 职场文书
共青团员自我评价范文
2014/09/14 职场文书
保研专家推荐信范文
2015/03/25 职场文书
英文投诉信格式
2015/07/03 职场文书
会议承办单位欢迎词
2015/09/30 职场文书
python 模拟在天空中放风筝的示例代码
2021/04/21 Python