2011-08-28 20 views
9

Mam klasę.Klasa PHP zgłasza błąd, co jest nie tak

Class User { 

    private $_name; 
    private $_email; 

    public static function factory() { 
     return new __CLASS__; 
    } 

    public function test() { 

    } 
} 

i kiedy wykonuję statyczne wywołanie metody, używając poniższej składni.

User::factory(); 

rzuca mi następujący błąd składni.

Parse error: syntax error, unexpected T_CLASS_C in htdocs/test/index.php on line 8 

błąd jest generowany, ponieważ metoda statyczna fabryki() nie jest w stanie utworzyć obiekt podczas wywołania metody statycznej.

i kiedy zmieniam stałą magiczną __CLASSS__ na nazwę bieżącej klasy tj. Na User to działa.

czego mi brakuje?

+0

Dlaczego nie wrócisz 'self' lub' $ this'? Czy potrzebujesz nowej instancji obiektu? – powtac

+0

Tak, potrzebuję utworzyć nową instancję obiektu za każdym razem, gdy nawiązuję połączenie. –

Odpowiedz

10

Spróbuj:

Class User { 

    private $_name; 
    private $_email; 

    public static function factory() { 
      $class = __CLASS__; 
      return new $class; 
    } 

    public function test() { 

    } 
} 
+0

to oczywiście działa, nie o to chodzi, nie chcę tworzyć obiektu w ten sposób. –

+0

Próbujesz utworzyć dynamiczny zwrot? –

+0

tak, to jest haczyk –

7

Spróbuj tego:

$class = __CLASS__; 
return new $class; 
+1

to nie działa :(, zgłasza następujący błąd 'błąd składni, nieoczekiwany T_CONSTANT_ENCAPSED_STRING' –

+0

@Ibrahim Azhar Armar: przepraszam, mój zły, ja zredagowałem moją odpowiedź, tym razem powinna – JRL

8

Nie bardzo wiem, dlaczego Twój przykład nie działa. Ale co ma praca:

public static function factory() 
{ 
    return new self(); 
} 
+0

wygląda jeszcze lepiej. :) –