我記得讀某處此代碼:逗號公共變量
<?php
class test {
public $foo = 6, $bar;
}
$a = new test();
echo $a->foo; //6
echo $a->bar; //no output
什麼是逗號public $foo = 6, $bar;
怎麼辦?爲什麼當我刪除public
時,我的IDE給我錯誤?我確實發現$bar
是這樣做的,但我不認爲這就是你爲什麼要這樣編碼的唯一原因。
我記得讀某處此代碼:逗號公共變量
<?php
class test {
public $foo = 6, $bar;
}
$a = new test();
echo $a->foo; //6
echo $a->bar; //no output
什麼是逗號public $foo = 6, $bar;
怎麼辦?爲什麼當我刪除public
時,我的IDE給我錯誤?我確實發現$bar
是這樣做的,但我不認爲這就是你爲什麼要這樣編碼的唯一原因。
逗號是功能上等同於:
<?php
class test {
public $foo = 6;
public $bar;
}
$a = new test();
echo $a->foo; //6
echo $a->bar; //no output
基本上,它只是意味着聲明另一公共變量。如果你刪除公共,你不再聲明一個公共變量,所以你的IDE抱怨。人們用這種方式編碼的原因是爲了節省空間。這只是一個更長的形式的簡寫。
逗號在公共$ foo = 6,$ bar;中做了什麼?
它可以讓你聲明瞭兩個類屬性 - $foo
(默認值爲6)和$bar
(默認值null
) - 與相同的訪問修飾符 - public
- 不重複了兩遍,就像這裏:
public $foo = 6;
public $bar;
順便提一下,no output
是本null
值轉換爲字符串(一個空字符串)的結果。
爲什麼我的IDE給我錯誤,當我刪除公共?
因爲不指定屬性而不指定其訪問修飾符。引用doc:
類成員變量被稱爲「屬性」。 [...]通過使用關鍵字
public
,protected
或private
, 中的一個,然後使用正常的變量聲明來定義它們 。 [...]爲了保持與PHP 4的向後兼容性,PHP 5將 仍然接受屬性聲明的 而不是(或除了)
public
,protected
,或private
使用關鍵字var
的。如果您使用var
來代替 聲明一個屬性,那麼PHP 5會將該屬性視爲已聲明爲public
。
換句話說,除非你使用var
,有一個在PHP的成員變量沒有這樣的事情default access modifier
(或no access modifier
特殊處理)。是的,這是一種不一致 - 因爲成員函數可以定義沒有訪問修飾符(在這種情況下,它們被處理爲public
)。
...這就是順便說一句,令人困惑的原因是unexpected T_VARIABLE, expecting T_FUNCTION
錯誤信息;最後,$foo = 6
聲明被視爲函數聲明。