2011-05-08 131 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