私はクラスが最初にあります。$name
は 'bob'に設定されています。子クラスでは、$name
を「カレン」に設定しましたが、動作しません。子クラスの親変数を定数値でオーバーライドできないのはなぜですか? (PHP)
私のエコーステートメントでは、第1のものは「カレン」の代わりに「ボブ」と言います。 2番目は、子クラスのメソッドを使用して、しかし、動作します。
この現象はなぜですか?
class First {
public $name;
public function __construct() {
$this->name = 'bob';
}
}
class Third extends First {
public $name = 'Karen';
public function set_name ($name) {
$this->name = $name;
}
}
$instance_of_third = new Third;
$third_name = $instance_of_third->name;
echo "<br />We're looking for Karen: $third_name<br />";
// $third_name here is 'bob' from parent class
$instance_of_third->set_name("Karen");
$third_name = $instance_of_third->name;
// $third_name here is 'Karen' only after using set_name()
echo "<br />We're looking for Karen: $third_name<br />";
EDIT:出力が正確であったことを示す2行を追加しました。
子クラスで$name
が明示的に 'Karen'に設定されていても、set_name()
関数を使用して変更しない限り、 'bob'と表示されます。
奇妙なことに、クラスを拡張してプロパティの1つを変更したい場合、コンストラクタコードを書く代わりに、明示的に行うことができると思います。 –
@ButtleButkus私の更新を見てください。出来るよ。 'new Foo' - >デフォルトのプロパティを持つ' Foo'の新しいインスタンスを作成し、そのインスタンスに対して '__construct'を自動的に呼び出して追加の初期化を行います。 – Gordon