2017-12-29 12 views
0

コミュニティに新たに加わり、OOPメソッドへのアプローチに関するベストプラクティスガイダンスがあるかどうか疑問に思っていますか?プロパティに影響を与えるメソッドと値を返すメソッド

プライベートメソッドはプロパティ値自体を割り当てるか、呼び出しメソッドによって割り当てられる値を返すべきであると想定します(インスタンス化/ 1回のルーチンなど)。

には、以下のPHPの例を考えてみましょう:

<?php 

class MyClass1 
{ 

    private $foo; 

    public function __construct() 
    { 
     $this->setFoo(); 
    } 

    private function setFoo() 
    { 

     // no params 
     // returns void 

     $this->foo = 6; 

    } 

} 


class MyClass2 
{ 

    private $foo; 

    public function __construct() 
    { 
     $this->foo = $this->setFoo(); 
    } 

    private function setFoo() 
    { 

     // no params 
     // returns value 

     return 6; 

    } 

} 


class MyClass3 
{ 

    private $foo; 

    public function __construct() 
    { 
     $this->foo = $this->setFoo(3); 
    } 

    private function setFoo($val) 
    { 

     // accepts param 
     // returns value 

     return $val; 

    } 

} 

?> 

は用/ MyClass1アプローチに対する重大な理由がありますか?手続きおよびアクセスされている方法/むしろパラメータを受け入れ、値を返すよりも、直接プロパティに割り当てると内蔵

すなわち(そう本質的に全てにdocblockが@returnボイドを含む)

ホープこれは理にかなって - 主に好奇心:)

多くのおかげで、

+1

'setFoo'は、** fooを渡された値に設定する必要があります。今はゲッターとして機能します。セッターやゲッタの使い方を学ぶのに時間を費やしてください。 http://thisinterestsme.com/php-getters-and-setters/ – Justinas

+0

デフォルト値を直接定義することができます: 'private $ foo = 6;' ...おそらくちょうどhttp://php.net/ manual/en/language.oop5.php –

+0

Class2は意味がありません。あなたは基本的にそこで定数として6を使用しているので、それを定数にして、メソッドを全く持たないかもしれません。それをメソッドにする場合は、fooが設定されていなければ 'setFoo'と呼ばないでください。 Class1が優れています。現実のシナリオでは、この設定者はしばしば何らかの形で外界にさらされ、複数回呼び出される可能性があります。コンストラクタからのみ呼び出す場合は、コンストラクタでプロパティをすぐに設定するか、プロパティ宣言自体で値を指定することもできます。 – GolezTrol

答えて

0

をここに私が管理しているよりも、より明確な用語ではるかに雄弁thread(Javaの指向が)です!

TLは、手順(オブジェクトの状態の変化、ノーリターン値)

  • 長所としてDR

    プライベートメソッド:強度をOOPまで再生(プライベートメソッド間のカプセル化/通信)

  • :スケーリングが難しい(複数のメソッドimplによる同じインスタンス変数の突然変異icatesフロー制御)

機能としてプライベートメソッド(オブジェクトの状態が変化しない、値が返されます)

  • 賛否:プログラムの流れの周りより明確
  • 短所:潜在的な意図しない隠された副作用のために(OOPの性質は、突然変異が完全に回避されることを保証することができない - 完全に文書化される仮定/条件に頼る)
関連する問題