����Զ�����

�ڱ�д�������OOP�� ����ʱ���ܶ࿪����Ϊÿ�����½�һ�� PHP �ļ��� ������һ�����գ�ÿ���ű��Ŀ�ͷ������Ҫ������include��һ���������б�ÿ���඼�и��ļ�����

�� PHP 5 �У��Ѿ�������Ҫ�����ˡ� spl_autoload_register() ��������ע�������������Զ�����������ʹ����δ��������ࣨclass���ͽӿڣ�interface��ʱ�Զ�ȥ���ء�ͨ��ע���Զ����������ű������� PHP ����ʧ��ǰ�������һ���������������ࡣ

Tip

���� __autoload() ����Ҳ���Զ�������ͽӿڣ���������ʹ�� spl_autoload_register() ������ spl_autoload_register() �ṩ��һ�ָ������ķ�ʽ��ʵ������Զ����أ�ͬһ��Ӧ���У�����֧�����������ļ�������������������еģ�����ˣ����ٽ���ʹ�� __autoload() ���������Ժ�İ汾�������ܱ����á�

Note:

�� PHP 5.3 ֮ǰ��__autoload �����׳����쳣���ܱ� catch ���鲶�񲢻ᵼ��һ����������Fatal Error���� �� PHP 5.3 ���ܹ� thrown �Զ�����쳣��Exception��������Զ����쳣�༴��ʹ�á� __autoload �������Եݹ���Զ������Զ����쳣�ࡣ

Note:

�Զ����ز������� PHP �� CLI ����ģʽ��

Note:

����������类���� call_user_func()���������ܰ���һЩΣ�յ��ַ������� ../�� �������������ĺ����в�Ҫʹ���û������룬������Ҫ�� __autoload() ʱ��֤�����롣

Example #1 �Զ�����ʾ��

�������Էֱ�� MyClass1.php �� MyClass2.php �ļ��м��� MyClass1 �� MyClass2 �ࡣ

<?php
spl_autoload_register
(function ($class_name) {
    require_once 
$class_name '.php';
});

$obj  = new MyClass1();
$obj2 = new MyClass2();
?>

Example #2 ��һ������

�������Լ��ؽӿ� ITest��

<?php

spl_autoload_register
(function ($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 ��������ʾ��

<?php
spl_autoload_register
(function ($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+ �е��쳣���� - û���Զ����쳣����

������һ���쳣�׸������ڵ��Զ����쳣��������

<?php
spl_autoload_register
(function ($name) {
    echo 
"Want to load $name.\n";
    throw new 
MissingException("Unable to load $name.");
});

try {
    
$obj = new NonLoadableClass();
} catch (
Exception $e) {
    echo 
$e->getMessage(), "\n";
}
?>

�������̻������

Want to load NonLoadableClass.
Want to load MissingException.

Fatal error: Class 'MissingException' not found in testMissingException.php on line 4