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(); ?>
佛语:我本求心不求佛,了知三界空无物,若欲求佛但求心,只这心心心是佛
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧