的PHP自動加載機僅僅是一個機制,包括文件當類構造。
如果你把所有的類放在1個文件中,你不需要自動加載器。當然,當編程OO你給每一個類它自己的文件,和多數民衆贊成在自動裝卸進來
一些例子:
class AutoLoader
{
public function __construct()
{
spl_autoload_register(array($this, 'ClassLoader'));
}
public function ClassLoader($class)
{
if(class_exists($class, false))
return true;
if(is_readable('path_to_my_classes/' . $class . '.php'))
include_once 'path_to_my_classes/' . $class . '.php'
}
}
$autoloader = new AutoLoader();
這裏會發生什麼事是創建自動加載類時,類方法Classloader被註冊爲自動加載器。
當創建一個新類時,Classloader方法首先檢查該類的文件是否已經加載。如果不是,則該課程將預先設置路徑並使用擴展名進行擴展。如果該文件可讀,則包含該文件。
當然,你可以使這非常複雜。我們來看一個名稱空間和映射器的例子。假設我們是在自動加載類:
private $mapper array('Foo' => 'path_to_foo_files/', 'Bar' => 'path_to_bar_files/');
public function ClassLoader($class)
{
if(class_exists($class, false))
return true;
// break into single namespace and class name
$classparts = explode('\\', $class);
$path = $this->mapper[$classparts[0]];
if(is_readable($path . $classparts[1] . '.php'))
include_once $path . $classparts[1] . '.php'
}
這裏,類名是一個命名空間部分和類名部分splittet。命名空間部分在映射器數組中查找,然後該路徑將用作php文件的包含路徑。
這些只是用來演示自動裝載機可以做什麼的示例。爲了生產,需要做更多的工作,例如錯誤檢查。
看起來像你的問題中的鏈接已經足夠知道 –
「php類Autoloader是否打開一個文件並檢查類名?」 - 它搜索文件中的所有類。 – zerkms
但是從哪裏可以知道它是如何實現的,從頭開始自動加載器的整個過程,這對我來說很有趣,因爲它的第一個寫法是 – meWantToLearn