2012-02-15 14 views
5

我做了一個按預期工作的自動加載器類,但我注意到一個奇怪的行爲。當我回顯發現傳遞給處理spl_autoload_register()函數的方法的類的結果時。我看到我有雙打。就像腳本被調用兩次,並且因爲它是一個單例,數據在我的情況下會生成2個數組。php singleton在自動加載器類中不斷調用自己兩次

我使用這種方法來創建我的單身

public static function init() 
{ 
    if (!isset(self::$instance)) 
     self::$instance = new self(); 

    return self::$instance; 
} 

我那麼有構造函數設置爲私有。我已經通過每個方法調試,試圖看看它看起來在哪裏創建自己的克隆。

我懷疑我的類和類在這個問題上被克隆在spl_autoload_register()函數的某個地方。

任何幫助,將不勝感激。

+0

你有沒有設置相應的__clone功能? – busypeoples 2012-02-15 16:22:33

+0

你能發佈完整的課程代碼嗎? – busypeoples 2012-02-15 16:25:49

+0

好吧,貼。如果我運行這個非單身實例,那麼它不會克隆自己。 – Eli 2012-02-15 16:33:51

回答

3

讓構造函數打印出一些東西。只是爲了看看它是否真的被稱爲不止一次。 你正在使用兩個自動加載器嗎? 我會在應用程序的開頭(可能是index.php)設置sp_autoload_register並註冊所有需要的自動加載器。 但是測試一下構造函數是否被第一次調用。

//首先我要改變這一點:

private static $instance = null; 

//初始化函數

public static function init() { 
    if (self::$instance === null) { 
    self::$instance = new Autoload(); 
    } 

    return self::$instance; 
} 
+0

我設置了一個計數器,並在每次調用該類時啓動計數器。當然,我得到它+1。你想讓我把spl_autoload_register放在哪裏?我已經在我的index.php中調用過這個腳本了。我更新了我的帖子,我的更新代碼也是 – Eli 2012-02-15 16:58:32

+0

我不確定這是在註冊方法裏面:spl_autoload_register(array('Autoloader','loadClass')); – busypeoples 2012-02-15 17:02:25

+0

嗯,我原來設置爲'spl_auto_register('self :: autoload()')'在我去單身路線之前。 – Eli 2012-02-15 17:06:13