__autoload()函数

如果定义了__autoload()函数,那么在代码中使用一个未定义的类的时候,该函数就会被调用,你可以在该函数中加载相应的类实现文件,如:
function __autoload( $classname )
{
    require_once( “{$classname}.php”);
}
但该函数已经不被建议使用,原因是一个项目中仅能有一个这样的__autoload()函数,因为php不允许函数重名。但当你使用一些类库的时候,难免会出现多个autoload()函数的需要,于是sql_autoload_register取而代之:

sql_autoload_register()会将一个函数注册到autoload函数列表中,当出现未定义的类的时候,SPL会按照注册的倒序逐个调用被注册的autoload函数,这意味着你可以使用sql_autoload_register()注册多个autoload函数。




例子:
同一个目录下,
文件Back.phhp
<?php
class Back {
    public function make() {
        print('back class');
    }
}
?>
文件Go.php
<?php
class Go {
    public function make() {
        print('go class');
    }
}
?>
文件test.php
<?php
function __autoload($classname)
{
    require_once($classname .'.php');
}

$go= new Go();
$go->make();
$back = new Back();
$back->make();

执行test.php时,实例化Go类时,会自动调用__autolod方法。
__autoload()是专门为类的不存在而设计的,很多框架利用到了这个函数,实现类文件的自动加载!!!




**************
备注 2017年2月1日周三
基本概念:
1.php代码本质上就是一行行的由解释器执行,php引入面向对象后,依然是这样。
2.要使用哪个类必须先引入,用require、include引入类文件以后,才能使用类的成员变量和成员方法。
yii2.0框架思路:
yii2.0框架,入口脚本调用的类文件中,就使用了sql_autoload_register(),它进而注入了yii2.0写的自动载入类的方法。 框架比较复杂,一个http请求过来以后,php脚本执行,然后返回http响应,这个php脚本执行过程要加载很多很多的类。
框架一开始就得需要很多基础的类,yii2.0把他们配置到了一个配置文件中,配置了命名空间和实际文件路径的对应关系。一旦脚本运行过程中,需要某个类,就先从这个配置文件中读取,如果有得到实际文件路径,就直接require这个文件,这就能使用这个类了。
如果脚本执行过程中,要引入的类文件不在配置列表中,就按照yii2.0的方法实现,即根据命名空间的结构,解析成对应的目录路径,再去找文件在不在。







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值