6

以下のコードを検討してください。

<?php

class Base {
        protected $name = "Base";

        public function getName() {
            return $this->name;
        }
}

class Foo extends Base {
        protected $name = "Foo";
}

$f = new Foo();
echo $f->getName(); // output: Foo

$b = new Base();
echo $b->getName(); // output: Base

Java などの他の言語ではインスタンス変数をオーバーライドできませんが、PHP では可能です。

PHPは型言語が弱いので可能なのでしょうか?

4

2 に答える 2

12

いいえ、弱い型付けとは関係ありません。

これは、PHP 開発者が行った設計上の決定にすぎないと思います。Java よりもスクリプト言語に近いためかもしれません。(Java では、これをサポートするためにフィールドの「仮想」ルックアップ テーブルが必要になるか、代わりに自動生成されたゲッター/セッターが必要になります)。

于 2010-10-24T18:23:45.407 に答える
-1

インスタンス変数を保護しました。これは、拡張クラスがそれを上書きできることを意味します。それを防ぎたい場合は、private を使用してください。

http://www.php.net/manual/en/language.oop5.visibility.php

于 2010-10-24T18:19:12.453 に答える