-1

インターフェイスと実装を分離しようとしています。そのため、さまざまなタスクを実行する関数がたくさんあります。私はもともとそれらをすべてパブリックとして持っていたので、他のページからそれらを呼び出しました。実際のワークロード関数をすべて非公開にしてから、1 つの公開関数を使用してそれらを呼び出すことで、これを強化しようとしています。

これが私が試みていることです:

class TestClass
{

    public function pub1()
    {

       $this->test1();
       $this->test2();
       $this->test3();

    }

    private function test1()
        {

         $t1 = '1'; 

         return $t1

         }

    private function test2()
        {

         $t2 = '2'; 

         return $t2

         }

    private function test3()
        {

         $t3 = '3'; 

         return $t3

         }
}

これはうまくいくと思いますが、関数を呼び出す方法がわかりません。pub1() は問題なく呼び出すことができますが、test1()、test2()、test3() の下の関数を呼び出すことができないようです。

パブリックからプライベートへの機能の 1 つに対して 1 つを行うと、これを機能させることができますが、それを行う必要がないことを望んでいました。

これに関するヘルプは素晴らしいでしょう。

ありがとう!

4

3 に答える 3

3

pub1() への呼び出しは、記述したように、test1()、test2()、および test3() を正しく呼び出す必要があります。ただし、テスト関数は値を返し、pub1() 関数はそれを破棄します。これらのテスト関数から呼び出し元に実際に何も返す必要がない場合は、そのままで問題ありません。

于 2012-09-11T20:18:05.387 に答える
2

設計を再考する必要があります。

オブジェクトは現実世界と強い関係があります。オブジェクトをブラック ボックスとして見て、外側で必要なプロパティとメソッドを確認します。

そう:

  • クラスの外で関数を呼び出したい場合は、パブリックを使用します。
  • クラス内または派生クラスで関数を呼び出したい場合は、protected を使用します。
  • クラス内でのみ関数を呼び出したい場合は、private を使用します。

インターフェイスがある場合は、それを定義してください。そして、クラスにそれを実装させます。

于 2012-09-11T20:16:37.423 に答える
-4

たぶん、このようなものですか?

public function pub1 ($name) {
    return $this->$name();
}
于 2012-09-11T20:16:26.353 に答える