2012-06-01 13 views
8

私は親クラスとサブクラスを持っています。親クラスにはvarを設定するコンストラクタがあり、そのサブクラスでvarを使用したいと思いますが、それは動作していますが、キーワードparentで混乱していますか?サブクラスphpとparentキーワードからの親変数へのアクセス?

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

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

これが働いたと私はmyVarの値を取得するが、私はキーワードparentを使用することになっていると私が行うとき、私は、エラー、例を取得し、

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

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

答えて

12

まず、Parentは予約語です。 2番目に、古いバージョンのPHPを使用していない限り、varを使用しないでください。あなたはprotectedを使うことができます。子クラスが継承する必要があるため、変数にアクセスするためにparentキーワードを使用する必要はありません。あなたが唯一の基本クラスのメソッドやベースクラスのstatic変数にアクセスするときparent::を使用する必要が

を明確にするために$this->myVar

EDIT 経由でアクセスすることができます。基本クラスの非静的変数にアクセスしようとすると、エラーが発生します。Access to undeclared static property" fatal error:

ここでは、開始するための例を示します。

<?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このコードの実際の例。

+0

はい私は情報のための5.3の感謝を使用しています:) – hadley

+0

親クラスにアクセスする際にキーワード 'parent'を使用するのはなぜマニュアルに記載されていますか?どうして私はここでそれを使う必要はないのですか? Thanks again again buddy – hadley

+1

基本クラスのメソッドや基本クラスの静的変数にアクセスするときに 'parent ::'を使うだけです。あなたが基本クラスの非静的変数にアクセスしようとすると、 '宣言されていない静的プロパティにアクセスするのにエラーが発生します。 '致命的なエラー:'この回答があなたに役立った場合、これを回答してください: –

-2

これを試してください:

echo parent::$myVar; 
1

キーワードparentは、アクセス方法や、親クラスの静的変数のみに使用すべきで、そう$myVarが静的​​ではないので、あなたの最初のコードは、適切なものです。

関連する問題