2012-06-01 4 views
8

Ich habe eine Elternklasse und eine Unterklasse, die Elternklasse hat einen Konstruktor, der ein var setzt und ich möchte das var in der Unterklasse verwenden, ich habe es funktioniert, aber werde durch das Schlüsselwort parent verwirrt?Zugriff auf eine Eltern-Variable aus der Unterklasse php und dem Eltern-Schlüsselwort?

Beispiel

class Sub extends Parent { 
    public function foo() { 
     echo $this -> myVar; 
    } 
} 

class Parent { 
    var $myVar; 
    public function __construct() { 
      $this -> myVar = 'a'; 
    } 
} 

Das funktionierte und ich den Wert von myVar, aber sollte ich das Stichwort zu verwenden parent und wenn ich bekomme ich einen Fehler, beispielsweise

class Sub extends Parent { 
    public function foo() { 
     echo parent -> myVar; 
    } 
} 

class Parent { 
    var $myVar; 
    public function __construct() { 
      $this -> myVar = 'a'; 
    } 
} 

Antwort

12

Zunächst einmal ist Parent ein reserviertes Wort. Zweitens: Verwenden Sie nicht var, es sei denn, Sie verwenden eine ältere Version von PHP. Sie können geschützt verwenden. Sie müssen das Schlüsselwort parent nicht verwenden, um auf die Variable zuzugreifen, da die untergeordnete Klasse sie erben soll. Sie können darauf zugreifen über $this->myVar

EDIT zu klären

Sie brauchen nur parent:: zu verwenden, wenn Methoden der Basisklasse oder static Variablen der Basisklasse zugreifen. Wenn Sie versuchen, auf eine nicht statische Variable der Basisklasse zuzugreifen, erhalten Sie einen Fehler Access to undeclared static property" fatal error:

Hier ist ein Beispiel, um loszulegen.

<?php 
class Animal{ 
    protected $myVar; 
    public function __construct() { 
      $this->myVar = 'a'; 
    } 
} 

class Cat extends Animal { 
    public function foo() { 
     echo $this->myVar; 
    } 
} 

$cat = new Cat(); 
$cat->foo(); 

?> 

Here's ein funktionierendes Beispiel für diesen Code.

+0

Ye Ich benutze PHP 5.3 Danke für die Info :) – hadley

+0

Warum heißt es in der Bedienungsanleitung, das Schlüsselwort "Eltern" beim Zugriff auf die Elternklasse zu verwenden? Wie kommt es, dass ich es hier nicht benutzen muss? Danke wieder buddy – hadley

+1

Sie müssen nur 'Eltern :: 'beim Zugriff auf Methoden der Basisklasse oder statische Variablen der Basisklasse verwenden. Wenn Sie versuchen, auf eine nicht statische Variable der Basisklasse zuzugreifen, erhalten Sie einen Fehler 'Zugriff auf nicht deklarierte statische Eigenschaft 'fataler Fehler:' Bitte markieren Sie diese als beantwortet, wenn diese Antwort Ihnen geholfen hat :-) –

1

Stichwort parent sollte nur, damit Ihr erster Code ist die richtige ist, um Zugriffsmethoden oder statische Variablen der übergeordneten Klasse verwendet werden, da $myVar nicht statisch ist.