簡體   English   中英

PHP類變量定義是否必要?

[英]Is PHP class variable definition necessary?

我是PHP面向對象編程的新手,但我知道以過程方式編寫代碼。

如果這是我的PHP類

<?php
class person {
  var $name;
  function __construct($persons_name) {
   $this->name = $persons_name;
  }

  function get_name() {
     return $this->name;
  }
}
?>

如果我在PHP頁面中訪問它

$jane = new person("Jane Doe");
echo "Her name is : ".$jane->get_name();

問題:是否真的需要添加var $name; 在我的PHP類中,因為我可以正確獲得她的名字的輸出是:Jane Doe即使沒有var $name; 變量 var $name; 在我的PHP類中?

從技術上講,不是,PHP非常寬容這樣的事情。 但是,如果僅出於文檔目的,這是一個好習慣。

可能更重要的是,顯式聲明屬性使您可以設置其可見性 在您的示例中,$ name是一個公共屬性(public是PHP中的默認可見性)。 如果您不需要將其公開(由於getter / setter可以更好地控制可以分配的值,通常不這樣做是比較安全的),則應聲明是受保護的還是私有的。

從語義上講,您應該這樣做,因為$name確實是類的一個屬性。 您的構造函數已經為屬性分配了$persons_name ,但是如果您保留了var $name; 出來,您的腳本的其余部分將不會真正知道您的類中是否存在這樣的屬性。 此外,如果構造函數沒有立即分配它, person::get_name()會嘗試檢索未聲明的$name屬性並觸發通知。

正如布倫頓·阿爾克(Brenton Alker)所說 ,明確聲明類屬性使您可以設置其可見性。 例如,由於您將get_name()作為$name ,因此可以將$name設置為private這樣在創建person對象后,就不能從類外部更改此人的名字。

同樣,嘗試分配給未聲明的類屬性會使它們在被分配之前被聲明為public屬性。

這是非常有用的。 想象一下,您在一個數組中編寫了一堆名稱不同的人員對象,然后您將在網站的另一個位置調用所有對象的名稱。 當您存儲每個特定人員的姓名時,這才有可能。

如果我理解正確,則無需聲明var $ name。 您可以改用PHP的魔術方法,在這種情況下為__set__get

編輯:這里有一個關於魔術方法的小介紹@ Nettuts。

暫無
暫無

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

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