2011-07-05 6 views
0

は単にPHP非クライアントコーダーのクラスの実行

他のクライアント・コーダーで使用する予定がないクラスを構築する理論の問題、実行する最善の方法は何ですか?次のことを考えてみましょう:

class Test 
{ 
    public function __construct() 
    { 
     $this->foo(); 
     $this->bar(); 
    } 

    public function foo(){ //do something } 

    public function bar(){ //do something } 
} 

$test = new Test; 

私は、このクラスがやりたい正確に把握し、順序はそれがで行う必要がありますように、私は単純に工事中の関数を呼び出します。しかし、同じことを行うことによって行うことができます:

class Test 
{ 
    public function __construct(){} 

    public function foo(){ //do something } 

    public function bar(){ //do something } 
} 

$test = new Test(); 
$test->foo(); 
$test->bar(); 

これを行う方法の利点は何ですか?それ等のパフォーマンス、デバッグ、

編集

これは、汎用的な問題であること。クラス内でメソッドを実行するこれらの2つの方法に関するすべての可能性と懸念を聞くことを望む。

+2

私の唯一の懸念は、コンストラクタ内のそれらのメソッドを呼び出すことによって、サブクラスがコンストラクタをオーバーライドする可能性があり、開発者がそれらを追加することを知らない限り、それらのメソッドが呼び出されないことです。 – Rodaine

+0

非常に有効なポイントです。あなたに+1 – grep

答えて

2

第1の方法では、これらの機能をprivateにして、オブジェクト自体内でのみ使用することができます。

class Test 
{ 
    public function __construct() 
    { 
     $this->foo(); 
     $this->bar(); 
    } 

    private function foo(){ //do something } 

    private function bar(){ //do something } 
} 

$test = new Test; 
//so: 
$test->foo(); //will throw an error 

あなたが機能protected代わりprivateを作る場合は、このクラスから継承するクラスが

(まだ外に呼び出される関数を可能にしていない間)関数を使用することができるだろう

2番目のオプションを使用すると、どのオブジェクトもクラス定義の外でこれらの関数を呼び出すことができます。コードによっては、そうしたくない場合もあります。

+0

有効なポイント。しかし、クライアントコードが存在しない場合、これが私を唯一のプログラマとして懸念すべきでしょうか? – grep

+0

@Headspin - '懸念'とはどういう意味ですか? – Neal

1

Nealの答えを詳しく説明してください。可能であれば、関数を非公開にしてください。そうすれば、後で変更したい場合は、クラス内でのみ使用されることがわかります。

質問に答えるには、最初の回答が優先されます。これは、コードを管理しやすくするためです。パフォーマンスは賢明ですが、違いはありません。

関連する問題