2011-05-08 127 views
0

與後續代碼:PHP OOP - 錯誤的對象返回

<?php 
class Loader { 
    private static $instances; 

    function __construct($class = null) { 
     return self::instance($class); 
    } 

    public static function instance($class) { 
     if(!isset(self::$instances[$class])) { 
      self::$instances[$class] = new $class(); 
     } 

     return self::$instances[$class]; 
    } 
} 

class Core { 
} 

$core = new Loader('Core'); 
print_r($core); 

?> 

我的print_r()返回的對象,而不是裝載機對象的核心,這是裝載機後實例構造。

感謝您的幫助!

回答

8

嗯?

如果你

$core = new Loader('Core'); 

然後$核心將是裝載機的實例... PS:構造函數沒有返回值。

根本不需要實例化Loader。

這樣做:

<?php 
class Loader { 
    private static $instances; 

    public static function instance($class) { 
     if(!isset(self::$instances[$class])) { 
      self::$instances[$class] = new $class(); 
     } 

     return self::$instances[$class]; 
    } 
} 

class Core { 
} 

$core = Loader::instance('Core'); 
print_r($core); 

或者你可以做一個簡單得多:

<?php 
function Load($class) 
{ 
    static $instances; 
    if(!isset($instances[$class])) 
     $instances[$class] = new $class(); 
    return $instances[$class]; 
} 

class Core { 
} 

$core = Load('Core'); 
print_r($core); 
+0

有一個在功能例的錯誤:你怎麼稱呼它'Loader',但後來稱呼其爲'負載'。 – Maerlyn 2011-05-08 21:47:27

+0

更正錯誤;) – peufeu 2011-05-08 22:11:56

+0

謝謝,我想我不能在函數內設置靜態變量。 – 2011-05-08 22:28:44