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

Hm?

당신이

$core = new Loader('Core'); 

그런 다음 $ 코어 로더의 인스턴스가 될 것입니다 않으면 ... PS : 생성자는 값을 반환하지 않습니다.

로더를 전혀 인스턴스화 할 필요가 없습니다.

<?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

+0

실수로 수정 ​​됨;) – peufeu

+0

고마워, 나는 함수 내에서 정적 변수를 설정할 수 없다고 생각했다. –