2

PHPで次のコードを記述しようとしています

class A {
 protected static $comment = "I am A" ;
 public static function getComment () {
  return self :: $comment; 
 }
}

class B extends A {
 protected static $comment = "I am B" ;
}

echo B::getComment () ; // echoes "I am A"

返してはいけませんI am Bか?oop PHP では、子は親を上書きしませんか? 説明ありがとうございます。

==編集==

また、私の質問は、インスタンスでは機能するため、静的とインスタンスの違いは何ですか:

class A {
    protected $comment = "I am A" ;

    public function getComment () {
        return $this -> comment ;
    }
}

class B extends A {
    protected $comment = "I am B" ;
}

$B=new B ;

echo $B->getComment();
4

3 に答える 3

3

あなたが探している機能は「遅延静的バインディング」と呼ばれ、ここに文書化されています

static::短いバージョンでは、静的変数を希望どおりに機能させるには、代わりにを使用する必要がありますself::

注: これは PHP 5.3 以降でのみ機能します。

于 2013-02-28T11:50:03.803 に答える
1

はい、上書きしますが、あなたの場合、getCommentメソッドを上書きしませんでしたparent class.

試してみると

class B extends A {
 protected static $comment = "I am B" ;
 public static function getComment () {
  return self :: $comment; 
 }
}

と表示されますI am B

実際に行っているのは、存在しないgetCommentメソッドを呼び出しているため、メソッドにバブルアップして結果を表示します。b classchild classparent class

于 2013-02-28T11:49:09.120 に答える
0

LATE STATIC BINDING を使用する必要があります

class A {
 protected static $comment = "I am A" ;
 public static function getComment () {
  return static :: $comment; 
 }
}

class B extends A {
 protected static $comment = "I am B" ;
}

echo B::getComment () ; // echoes "I am A"

これが意味をなすことを願っています

于 2013-02-28T11:52:06.767 に答える