spl_autoload_register 和 __autoload()魔术方法
Posted wanglijun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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(); ?>
以上是关于spl_autoload_register 和 __autoload()魔术方法的主要内容,如果未能解决你的问题,请参考以下文章
php中自动加载类_autoload()和spl_autoload_register()实例详解
PHP中spl_autoload_register函数的用法