簡體   English   中英

為什么可以在PHP中覆蓋實例變量而不是在Java中?

[英]Why is it possible to override instance variables in PHP but not in Java?

請考慮以下代碼:

<?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是弱類型語言所以它可能嗎?

不,它與弱打字無關。

我想這只是PHP開發人員的一個設計決策。 這可能是因為它更像是一種腳本語言而不是Java。 (在Java中,您需要為字段提供“虛擬”查找表以支持此操作,或者自動生成的getter / setter)。

您使實例變量受到保護,這意味着擴展類可以覆蓋它。 如果你想防止私人使用。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM