2012-06-21 28 views
16
class Manage 
{ 

spl_autoload_register(function($class) { 
    include $class . '.class.php'; 
}); 
} 

說我有一些類似上面的代碼。我選擇使用加載類的匿名函數方法,但這是如何使用的?它究竟如何確定要加載哪個'$class'如何使用spl_autoload_register?

+0

你的代碼有誤。將'sql_autoload_register'放在'Manage'類之外,或者將它放在一個方法中。 – xdazz

+2

@zerkms今天OP和他們的犯規口是什麼?爲什麼他們總是攻擊mods? –

+1

你應該做的第一件事是在發佈之前先對你的代碼進行語法錯誤檢查。 – hakre

回答

21

您不能將代碼放在那裏。你應該在課後添加SPL註冊。如果你想註冊Manage類中的功能,你可以這樣做:

class Manage { 
    public static function autoload($class) { 
     include $class . '.class.php'; 
    } 
} 

spl_autoload_register(array('Manage', 'autoload')); 

然而,正如你證明,你可以使用匿名函數。你甚至都不需要一個類,所以你可以這樣做:

spl_autoload_register(function($class) { 
    include $class . '.class.php'; 
}); 

無論哪種方式,您所指定的功能被添加到了負責自動加載功能的游泳池。你的函數被附加到這個列表中(所以如果列表中有任何東西,你的將會是最後的)。有了這個,當你做這樣的事情:

UnloadedClass::someFunc('stuff'); 

PHP會認識到,UnloadedClass尚未宣佈。然後它將遍歷SPL自動加載函數列表。它將用一個參數調用每個函數:'UnloadedClass'。然後在每個函數被調用後,它會檢查該類是否存在。如果沒有,它會一直持續到列表結束。如果該類從未加載過,則會有一個致命錯誤,告訴您該類不存在。

12

它究竟如何確定要加載哪個'$ class'?

$class自動通過php。並且這是尚未聲明的類的名稱,但在運行時的某處使用了

+0

不錯。謝啦。這就是我想知道的。 – Viraths