spl_autoload_register 和 __autoload()魔术方法

在 PHP 5.3 之前,__autoload 函数抛出的异常不能被 catch 语句块捕获并会导致一个致命错误(Fatal Error)。 

尽管 __autoload() 函数也能自动加载类和接口,但更建议使用 spl_autoload_register() 函数。 spl_autoload_register() 提供了一种更加灵活的方式来实现类的自动加载(同一个应用中,可以支持任意数量的加载器,比如第三方库中的)。因此,不再建议使用 __autoload() 函数,在以后的版本中它可能被弃用。

autoload_function
这是一个函数【方法】名称,可以是字符串或者数组(调用类方法使用)。这个函数(方法)的功能就是,来把需要new 的类文件包含include(requeire)进来,这样new的时候就不会找不到文件了。其实就是封装整个项目的include和require功能。

throw
此参数设置了 autoload_function 无法成功注册时, spl_autoload_register()是否抛出异常。

prepend
如果是 true,spl_autoload_register() 会添加函数到队列之首,而不是队列尾部。

test.php

<?php
class test
{
    function __construct(){
        echo "test 类被初始化了<br>";
    }
    function show(){
        //当前页面是utf8编码   
        $str = '中文89PHP';

        echo strlen($str)."<br/>"; //中文+数字+英文:6 + 2 + 3 = 11
        echo mb_strlen($str, 'gbk')."<br/>"; //中文+数字+英文:3 + 2 + 3 = 8
        echo mb_strlen($str, 'utf8')."<br/>"; //中文+数字+英文:2 + 2 + 3 = 7 

        //数据库 varchar 一个中文占一个字符长度
    }
}
my_autoload.php 文件
<?php
//方法一:自动加载函数 5.0之后弃用
/*function __autoload($class)
{
    $file = $class . '.php';
    if ( is_file($file) ) {
        require_once($file);
    }
}

$test = new test(); //输出:test 类被初始化了
*/

//使用 spl_autoload_register 函数
//方法二:
class my_autoload
{
    public static function autoload($class){
        $file = $class . '.php';
        if ( is_file($file) ) {
            require_once($file);
        }
    }
}
//注册加载
spl_autoload_register("my_autoload::autoload",true,true);

$test = new test(); //输出:test 类被初始化了
$test->show();

?>

 

posted @ 2019-05-26 16:36  王默默  阅读(989)  评论(0编辑  收藏  举报