2014-03-26 34 views
1

如果類構造函數設置該類的屬性,是否建議仍檢查該屬性是否在其他方法中設置?代碼:檢查屬性是否在類中設置

class A { 

    public $property; 

    public function __construct($value) { 
     $this->property = $value; 
    } 

    public function doSomething() { 

     if(isset($this->property)) { 
      //actual code here 
      //...but is this isset-check necessary? 
     } 
     else { return false; } 
    } 
} 

我只是用來檢查是否設置了變量,只是想知道是否有任何顧慮離開它。謝謝!

+0

檢查此答案關於getters和setters http://stackoverflow.com/a/4478690/1666071 – enapupe

回答

1

這取決於你想達到什麼。

isset($this->property)在您的具體情況下將爲true如果屬性爲null以及。如果這是你想要的 - 更好的可能是檢查它是否是null明確

if ($this->property === null) 

如果這不是你想要什麼,你只是想確保則該屬性存在是多餘的,因爲:

  1. 作爲一旦財產宣佈 - 它將在那裏
  2. 如果你擔心一些代碼unset該屬性,因爲它是公開的(這是一個壞主意) - 然後使它privateprotected,並不直接暴露訪問它,但親提供一個吸氣而不是
+0

感謝您的答案。私人財產似乎是一個好主意開始。我所需要的是,如果$ property不包含特定格式的值(僅填充int的單維或多維數組),則停止運行代碼。這些檢查在我的真實代碼中的構造函數中。如果構造函數返回false,該類無法初始化,對吧?因此,如果我是正確的,那麼其他方法在這種情況下無法執行任何操作。這是我的問題。 ;) – joepd

+0

「如果構造函數返回false,則類不能初始化,對嗎?」 - - 不正確。構造函數不能返回任何值。停止初始化對象狀態的唯一方法是從構造函數中拋出一個異常。 – zerkms

+0

這就是如果你不編程一段時間會發生什麼! ;)我認爲使用setter函數可能比將所有的邏輯放在構造函數中好得多。然而,就我而言,$ property中的數據對於類的操作是絕對必要的(每種方法都使用$ property)。可以在構造函數中設置$ property,如[本頁]所述(http://stackoverflow.com/questions/3032808/purpose-of-php-constructors)。我只是不喜歡所有那些在我的代碼中拋出/嘗試/捕獲的東西,那麼使用setter會更好嗎? – joepd