2012-11-24 119 views
2

我記得讀某處此代碼:逗號公共變量

<?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是這樣做的,但我不認爲這就是你爲什麼要這樣編碼的唯一原因。

回答

4

逗號是功能上等同於:

<?php 
class test { 
    public $foo = 6; 
    public $bar; 
} 

$a = new test(); 
echo $a->foo; //6 
echo $a->bar; //no output 

基本上,它只是意味着聲明另一公共變量。如果你刪除公共,你不再聲明一個公共變量,所以你的IDE抱怨。人們用這種方式編碼的原因是爲了節省空間。這只是一個更長的形式的簡寫。

3

逗號在公共$ foo = 6,$ bar;中做了什麼?

它可以讓你聲明瞭兩個類屬性 - $foo(默認值爲6)和$bar(默認值null) - 與相同的訪問修飾符 - public - 不重複了兩遍,就像這裏:

public $foo = 6; 
public $bar; 

順便提一下,no output是本null值轉換爲字符串(一個空字符串)的結果。

爲什麼我的IDE給我錯誤,當我刪除公共?

因爲不指定屬性而不指定其訪問修飾符。引用doc

類成員變量被稱爲「屬性」。 [...]通過使用關鍵字publicprotectedprivate, 中的一個,然後使用正常的變量聲明來定義它們 。 [...]

爲了保持與PHP 4的向後兼容性,PHP 5將 仍然接受屬性聲明的 而不是(或除了)publicprotected,或private使用關鍵字var的。如果您使用var來代替 聲明一個屬性,那麼PHP 5會將該屬性視爲已聲明爲public

換句話說,除非你使用var,有一個在PHP的成員變量沒有這樣的事情default access modifier(或no access modifier特殊處理)。是的,這是一種不一致 - 因爲成員函數可以定義沒有訪問修飾符(在這種情況下,它們被處理爲public)。

...這就是順便說一句,令人困惑的原因是unexpected T_VARIABLE, expecting T_FUNCTION錯誤信息;最後,$foo = 6聲明被視爲函數聲明。