2009-07-06 68 views
39

我是新來的OOP範例,所以這個問題可能有一個簡單的解釋...什麼時候應該在PHP類中聲明變量?

您是否總是需要在類中聲明公共對象範圍的變量?例如:

<?php 

class TestClass 
{ 
    var $declaredVar; 

    function __construct() 
    { 
     $this->declaredVar = "I am a declared variable."; 
     $this->undeclaredVar = "I wasn't declared, but I still work."; 
    } 

    function display() 
    { 
     echo $this->declaredVar . "<br />"; 
     echo $this->undeclaredVar; 
     echo "<br /><br />"; 
    } 
} 

$test = new TestClass; 
$test->display(); 

$test->declaredVar = "The declared variable was changed."; 
$test->undeclaredVar = "The undeclared variable was changed."; 

$test->display(); 

?> 

在這段代碼中,即使$declaredVar是唯一聲明的變量,$undeclaredVar是一樣訪問和使用 - 它似乎表現得好像我已經宣佈它爲公衆。

如果未聲明的類變量總是可以像這樣訪問,那麼先聲明它們有什麼意義?

回答

35

該變量不初始化,它只是未申報。

在類定義中聲明變量是可讀性風格的一個要點。 另外你可以設置無障礙(私人或公共)。

無論如何,明確聲明變量與OOP無關,它是編程語言特定的。在Java中你不能這樣做,因爲變量必須明確聲明。

+2

所以這只是因爲PHP真的寬恕未申報的變量的工作,對嗎? – Andrew 2009-07-06 11:30:34

+1

對。 PHP應該發出一個警告,儘管... place error_reporting(E_ALL);在文件的頂部。 – Stephan202 2009-07-06 11:35:57

1

封裝的通用OOP範式說,你不應該讓你的內心狀態變量出方,這意味着他們應該是私人的,它允許你改變你的類的實現,而不需要改變,你使用它的代碼。最好通過構造函數和類的getter和setter方法來初始化變量。

13

如果聲明的類中的成員,你可以設置它的輔助功能e.g

private $varname; 
+5

注意:自PHP 5以來,這隻被支持(以防萬一您被困在4.x樹上),但我同意顯式設置變量和方法可見性是很好的做法 - 只是因爲PHP口譯員並不要求這並不意味着你不應該使用它。 – 2009-07-06 12:11:49

0

一般情況下,一旦有足夠的信息正確執行,變量應該被初始化。

如果一個類變量需要某些信息被明智地初始化,那麼這個信息應該傳遞給構造函數。

使用PHP的語法在定義點隱式聲明變量是,恕我直言,引入錯誤 - 如果你的類需要一個變量然後聲明它,並使用OOP提供的所有信息隱藏的方式。

9

您應該始終聲明您的成員變量並在類中指定它們的可訪問性。我喜歡在我的功能之後將這些信息放在課程的最後。

只要有足夠的信息,就應該定義它們。可能在構造函數中或通過setter函數。

這樣做很重要,因爲它使人們使用您的代碼更輕鬆。他們不必猜測不同房產來自哪裏或爲什麼他們在那裏。另外,大多數(如果不是全部的話)IDE都不會在類變量上使用,除非你已經將它們聲明在某個地方。代碼完成/提示是IDE的許多好處之一,如果沒有聲明變量,則會使該功能無用。

0

Federico Culloca說:「這個變量不是未初始化的,它只是未聲明的」。此外,您沒有爲它們定義任何訪問修飾符,以便它們的行爲類似於應用於它們的public修飾符。

您可能已經知道。 PHP是一種鬆散類型的語言。但程序員應該始終遵循最佳實踐(但不要在php中使用原始數據類型)。

您應該對類級變量使用專用修飾符,併爲它們提供訪問器和增量器方法(Getters和Setter)。

相關問題