我想知道爲什麼PHP語言允許在大多數語言需要在類聲明本身內定義屬性時使用隱式屬性聲明(請參閱下面的代碼)。這種類型的編碼風格有實際用途嗎?爲什麼在PHP中使用隱式屬性聲明?
$user1 = new User();
$user1->name = "Kylie";
echo $user1->name;
class User{}
我想知道爲什麼PHP語言允許在大多數語言需要在類聲明本身內定義屬性時使用隱式屬性聲明(請參閱下面的代碼)。這種類型的編碼風格有實際用途嗎?爲什麼在PHP中使用隱式屬性聲明?
$user1 = new User();
$user1->name = "Kylie";
echo $user1->name;
class User{}
用例是值對象
$a = new stdClass;
$a->something = 12;
$a->somethingElse = 'Hello World';
myFunction ($a);
這允許創建一些對象,只需隨身攜帶的結構化數據(像其他語言structs
),而不需要定義一個類爲了它。
另一點是,因爲PHP無論如何都是弱類型的 - 沒有真正的理由來禁止它。如果你需要更強烈的東西,overweite __set()
public function __set ($propertyName, $value) {
throw new Exception("Undefined Property $propertyName");
}
我更想知道PHP爲什麼不強制程序員在初始化之前定義類定義中的屬性。隱性財產申報是否有益並在運行中創建它們? – locoboy 2011-05-17 07:59:13
好處(也許你還沒有看到我的編輯之一;))是,你有時根本不需要聲明類,因爲如果你需要一個沒有任何行爲的結構(〜= methods),你可以例如'stdClass'。但是,我沒有看到任何缺點^^ – KingCrunch 2011-05-17 08:03:03
嘗試禁用警告抑制和這樣的聲明不會顯得那麼含蓄了))
只是再次測試;)它的錯誤。 'error_reporting(E_ALL | E_STRICT); class B {} $ b = new B; $ b-> x = 12;' – KingCrunch 2011-05-17 08:06:32
我會說這是來自PHP已經和仍然相當寬鬆關於它的數據類型,並且保留至少一點向下兼容性,這些腳本已經在早期的PHP版本(< 5)中編寫過。
可能重複的[隱式類變量聲明在PHP?](http://stackoverflow.com/questions/3115115/implicit-class-variable-declaration-in-php) – 2011-05-17 07:58:38
大多數非編譯/腳本語言允許。在PHP中,字典('array')是一個基本的數據類型,並且是早期對象系統的子結構。這就是語言的設計。 – mario 2011-05-17 08:00:19