2016-04-15 117 views
0

我一直在想某件事情,我希望有人能爲我澄清。PHP讓函數設置一個成員變量或讓它返回結果

假設我們有一個類

class Test 
{ 
    private $value; 

    function first() 
    { 
     if("this"=="that") { 
      $neededVariable = 1; 
     } 
    } 
    function second() 
    { 
     $this->first(); 
     //I need to evaluate something that was done in function first 
     if($neededVariable===1) { 
      //do something 
     } 
} 

現在什麼是最好的做法呢?據我可以告訴有兩種選擇:

  1. first()功能設置的成員變量與$this->value = 1;並訪問變量與second()功能。

2.該first()函數可能返回$neededVariable

他們都給出了相同的結果,但我很擔心,如果有最佳做法。也許一個人比另一個人有更好的表現,或者僅僅因爲這是約定選擇1/2。

任何答案非常感謝!

感謝提前:)

+1

屬性在對象上持久存在,返回的值更加短暫。你需要決定你想要的。該值是否有助於對象的*狀態*?或者它只是您需要一次的值,但不需要堅持和/或您*希望*根據需要重新計算每次? – deceze

回答

0

在$ this中存儲第一個結果意味着修改對象的狀態。使用它只是爲了傳遞一個結果是糟糕的設計,因爲你的代碼的讀者會認爲修改對象的狀態有更深的含義。更糟糕的是,調用second()也會像first()一樣修改對象的狀態 - 這是代碼用戶期望的嗎?如果修改對象的狀態是的預期用途 first(),並且用戶很清楚second()會具有相同的效果,那麼在first()中設置$ this-> value和在second()中調用first()是很好的設計。

但是,如果您只是想共享邏輯,只需編寫一個只重用邏輯的函數即可。這樣,您可以將設置狀態與重用邏輯分開。

class Test 
{ 
    private $value; 

    private function evaluate() { 
     $neededVariable = 0; 
     if ("this"=="that") { 
     $neededVariable = 1 
     } 
     return $neededVariable; 
    } 

    function first() 
    { 
     $this->value = $this->evaluate(); 
    } 

    function second() 
    { 
     $neededVariable = $this->evaluate(); 
     if($neededVariable===1) { 
      //do something 
     } 
    } 
} 
+0

謝謝你爲我澄清!當我需要一個不會改變對象狀態的特定計算時,它決定我是否應該使用私有成員或使用函數。 – Mardin101

0

在您剛纔提到我們只是調用一個子程序(功能),併爲其創建已經變得利用,從而沒有更多的內存需求的成員變量的空間的第一種方法, 在第二種情況下,如果從該子例程返回值,則需要另一個臨時變量來存儲該數據。它們都有相同的結果,但你不知不覺會在第二種方法中爲該臨時變量創建一個更多的內存塊。

class Test 
    { 
     private $value; 

     function first() 
     { 
      if("this"=="that") { 
       $neededVariable = 1; 
      } 
    return $neededVariable; 
     } 
     function second() 
     { 
    //either you create a variable or use directly the function in if..  
    //both will require that temporary memory block. 
      $var = $this->first(); //or if($this->first() == 1) 
      if($var ===1) { 
       //do something 
      } 

    } 
0

我認爲no.1更好。

因爲如果你使用的2號,每次調用第二(),第一次()也將被稱爲第二FUNC(壞CPU首先需要沉重的CPU使用率時)

但是,沒有。 2也有一些好的東西。每次你想要使用func時,你應該先調用func,除非$ value將爲null。如果你想在不同的頁面上使用這個類,這很糟糕。

相關問題