2016-04-15 5 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 
     } 
} 

があると?私の知る限り2つのオプションがあります。

  1. first()機能が$this->value = 1;でメンバ変数を設定し、second()機能でその変数にアクセスしてみましょう。

2. first()関数は、$neededVariableを返すことができます。

両方とも同じ結果が得られますが、ベストプラクティスがある場合は、私はそれを考慮しています。おそらく1つは他のものよりも性能が良いか、または単にオプション1/2のために行なわれるためです。

ご質問いただければ幸いです。あなたは私たちがちょうどルーチン(関数)を呼び出していると、作成されたメンバ変数のためのスペースがすでにので、それ以上のメモリ要件を利用しないばかりれる言及した最初のアプローチでは、事前:)

+1

オブジェクトにプロパティが残っていると、返される値はより一時的です。あなたはあなたが望むものを決める必要があります。値はオブジェクトの*状態*に寄与しますか?または、一度必要とする価値ですが、持続させる必要はなく、必要に応じて毎回再計算したいですか? – deceze

答えて

0

$の最初の結果を格納することは、オブジェクトの状態を変更することを意味します。単純に結果を渡すことは、コードの読者がオブジェクトの状態の変更にいくらか深い意味があると想定するので、悪い設計です。さらに悪いことに、second()を呼び出すと、first()と同じ方法でオブジェクトの状態が変更されます。これはコードのユーザーが期待するものですか?

の目的はのfirst()であり、second()が同じ効果を持つことはユーザーにはっきりと分かりますが、first()と$ this-> 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

おかげで、 2番目の値がそのサブルーチンから返された場合、そのデータを格納するために別の一時変数が必要になります。彼らはどちらも同じ結果を持っていますが、あなたは知らないうちに、2番目のアプローチでその一時変数のメモリブロックをもう1つ作成します。

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

私は1番良いと思います。

ので、あなたは、2番を使用している場合、あなたは第一、第二()を呼び出すたびに()もFUNC秒に呼び出されます。(CPUに悪い第一の重CPUのuseageを必要とするとき)

しかし、ノー。 2には良いことがいくつかある。 func secondを使用するたびに、$ valueがnullでなければfuncを先に呼び出す必要があります。このクラスを別のページで使いたい場合は、これは悪いことです。

関連する問題