2013-08-23 15 views
6

Próbuję użyć self Zamiast wpisywać nazwę klasy wewnątrz propery_exists funkcji w następujący sposób:Wskazówka: użycie niezdefiniowanej stałej jaźni - zakłada „ja”, gdy umieścić w property_exists jako pierwszy argument

private static function instantiate($record){ 
    $user = new self; 
    foreach($record as $name => $value){ 
     if(isset($user->$name) || property_exists(self, $name)){ 
      $user->$name = $value; 
     } 
    } 
    return $user; 
} 

ale kiedy prowadził ten skrypt to pojawia się błąd:

Wskazówka: użycie niezdefiniowanej stałej samo - zakładany „ja” w /var/www/photo_gallery/includes/User.php na linii 36

Linia 36 to linia, na której wywoływana jest metoda property_exists.

Po zmianie nazwy na User (nazwa klasy). Działa idealnie.

Chciałbym wiedzieć, dlaczego przy użyciu takiego powiadomienia jest używane self? Czy self nie odnosi się do klasy?

Odpowiedz

3

Użyj self, aby odwołać się do bieżącej klasy. Nie nazwa klasy.

Spróbuj użyć magicznych stałych:

if(isset($user->$name) || property_exists(__CLASS__, $name)){ 

Z podręcznika PHP: __CLASS__

Nazwa klasy. (Dodano w PHP 4.3.0) Od PHP 5 ta stała zwraca nazwę klasy, tak jak ją zadeklarowano (rozróżniana jest wielkość liter). W PHP 4 jego wartość jest zawsze pisana małymi literami. Nazwa klasy zawiera przestrzeń nazw, w której została zadeklarowana (np. Foo \ Bar). Zauważ, że od PHP 5.4 CLASS działa również w cechach. Kiedy stosować w sposobie cechy, CLASS to nazwa klasy cecha jest wykorzystywana w

PHP Manual

Przykład:.

class Test { 
    public function __construct(){ 
     echo __CLASS__; 
    } 
} 

$test = new Test(); 

wyjściowa:

Test 
+0

Bardzo ładne. Dzięki, Vahid. –

Powiązane problemy