2009-09-16 46 views
7

我已經按照教程創建了一個簡單的使用PHP編寫博客應用程序,並修改了本教程中的類,以便它們具有其他功能。修改這個非常棒的骨骼應用程序讓我更好地理解了PHP的工作方式,但是我遇到了一個有趣的情況。在PHP中顯式聲明屬性很重要嗎?

我的項目中的一個類有大約六個類屬性,如public $id, public $author, public $post。這些屬性是在這個類的開始處聲明的,但是我發現如果我刪除了其中一個屬性,那麼應用程序仍然可以正常工作。

這是錯誤的,從一個類的開頭刪除屬性聲明,如public $datePosted如果該類仍然規定變量此屬性是這樣的:$this->datePosted = $someVariableName;

回答

12

如果喲ü嘗試以訪問尚未聲明的類屬性,PHP會發出通知:如果先($fu->baz = 'blah')設定的值

class Foo { } 

var $fu = new Foo(); 
echo $fu->baz; 

Notice: Undefined property: Foo::$baz in blah.php on line 4

然後它贏得抱怨,但這不是一個好的情況。

您一定要申報所有的類變量(當然,除非你想有一些有趣的magic methods)...

8

這對任何人閱讀你的代碼更清晰的成員一直明確地定義爲公共而不僅僅是違約,因爲你沒有將它們分配爲公衆成員。

此外,$this->$datePosted是錯誤的,它應該是這樣的:

$this->datePosted = $someVariable; 

這可能是爲什麼你正在經歷一個錯誤。

+0

感謝您的回答。 $ this - > $ datePosted是Daok修正的錯字。這在我的代碼中實際上不是問題。 – somas1 2009-09-16 14:59:52

2

此外,如果您刪除的聲明和代碼之前書面方式來讀取這個變量,你必須像

PHP發現錯誤:未定義的屬性:用C A :: $所沒有的:\未定義的屬性: A ::在C $所沒有的:在 線8

通知TEMP \ test.php的\ TEMP \ test.php的上 線8

5

PHP是真的鬆動關於如何處理類成員的定義。您在技術上不必聲明它們。但是你應該,有兩個重要原因:

  • 人與智能的IDE(Eclipse中,Aptana或Zend Studio的)會很喜歡,如果他們可以利用他們的編輯器的代碼智能感知(自動完成)與工作時你的課程。此功能確實有助於防止涉及錯別字的錯誤。如果你沒有聲明你的字段,IDE沒有真正的方法來確定類的字段。

  • 有人剛剛完成了一個編譯語言(C++)工作後,你可能會發送一個殺手,如果他們看到缺乏正確定義的字段。宣佈它們只是一個好習慣。沒有理由不這樣做。