Note:
在 5.3.0 版之前,__autoload 函数抛出的异常不能被 catch 语句块捕获并会导致一个致命错误。从 5.3.0+ 之后,__autoload 函数抛出的异常可以被 catch 语句块捕获,但需要遵循一个条件。如果抛出的是一个自定义异常,那么必须存在相应的自定义异常类。__autoload 函数可以递归的自动加载自定义异常类。
Note:
自动加载不可用于 PHP 的 CLI 交互模式。
Example #1 自动加载示例
本例尝试分别从 MyClass1.php 和 MyClass2.php 文件中加载 MyClass1 和 MyClass2 :
function __autoload($class_name){require_once $class_name.'.php';}$obj = new MyClass1();$obj2 = new MyClass2();
注意:MyClass1.php和MyClass2.php需要和当前脚本在同一目录才能加载到
Example #2 另一个例子
本例尝试加载接口 ITest:
function __autoload($name) { var_dump($name);}class Foo implements ITest {}/*string(5) "ITest"Fatal error: Interface 'ITest' not found in ...*/
Example #3 自动加载在 PHP 5.3.0+ 中的异常处理
本例抛出一个异常并在 try/catch 语句块中演示。
function __autoload($name) { echo "Want to load $name.\n"; throw new Exception("Unable to load $name.");}try { $obj = new NonLoadableClass();} catch (Exception $e) { echo $e->getMessage(), "\n";}
以上例程会输出:
Want to load NonLoadableClass.
Unable to load NonLoadableClass.
Example #4 自动加载在 PHP 5.3.0+ 中的异常处理 – 没有自定义异常机制
本例将一个异常抛给不存在的自定义异常处理函数。
以上例程会输出:
Want to load NonLoadableClass.
Want to load MissingException.
Fatal error: Class ‘MissingException’ not found in testMissingException.php on line 4