php __autoload,spl_autoload_register的使用和特征

项目需求

CodeIgniter+Smarty3.0.8

Smarty 使用了 自动装载机制,如果不开启自带的自动装载,那Smarty会注册自己的一个方法做自动装载,导致__autoload 失效。为什么失效呢!下面分析下

PHP 版本>=5.1.2

当我们不调用spl_autoload_register 去注册自动装载方法的时候(可以调用spl_autoload_functions() 方法来查看当前的自动装载累的方法有哪些)

系统会自动使用__autoload 作为自动装载的方法

调用 spl_autoload_functions()  得到 一个方法: __autoload

一旦我们调用了 spl_autoload_register 方法,那__autoload方法就会失效

两种情况:

1、调用spl_autoload_register(),不带参数

这个时候会注册一个 spl_autoload 方法

调用 spl_autoload_functions()  得到 一个方法: spl_autoload

2、调用spl_autoload_register(‘my_autoload’),带参的可以有多个参数,class,function 也可以

这个时候会注册一个用户自己的方法

调用 spl_autoload_functions()  得到 一个方法: my_autoload

——————————-

备注:可以注册多个自己的方法,甚至可以吧__autoload 重新注册回去

那如果smarty导致__autoload不能用,那就注册一个自己的autoload方法解决问题

 

  day-trips

发表评论