2

さて、コードを最も効率的に構造化する方法を見つけようとしています。私は最近、すべてのメソッドを含む 1 つの巨大なクラス ファイルから、1 つの基底クラスに結合されたより小さなファイルに切り替えました。これは私が望んでいるものですが、正しく動作させることができず、構造について助けが必要です。

基本的に私はこれを行う必要があります:

  • 他のクラスの単なる「ツール」である関数 (コンバーター関数など) がいくつかあります。これらの関数は、すべての子クラスからアクセスできる必要があります。
  • 場合によっては、「子クラス 1」が「子クラス 2」の関数を使用する必要があります。
  • 子クラスは、別の子クラスが参照できる変数を設定できる必要があります。

これらの要件をどのように開始できるか教えてください。コード例は大歓迎です!

おそらく、いくつかの疑似コードが役立つでしょう - しかし、私がオフの場合は、何がよりうまく機能するか教えてください!

class main {
    private $test;
    public function __construct() {
        //do some stuff
    }
    public function getTest() {
        echo('public call: '.$this->test);
    }
    private function randomFunc(){
        echo('hello');
    }
}
class child1 extends main {
    public function __construct() {
        parent::$test = 'child1 here';
    }
}
class child2 extends main {
    public function __construct() {
        echo('private call: '.parent::$test); //i want this to say "private call: child1 here"
        parent::randomFunc();
    }
}
$base = new main;
new child1;
new child2;
$base->getTest();

だから私はその結果が欲しい:

private call: child1 here
hello
public call: child1 here

これまでのところ、私が試したことは機能しません...助けてください! ありがとうございました。

4

1 に答える 1

2

最初のポイント:

ヘルパー クラスの場合、メソッドを静的にすることを選択できるため、インスタンスは必要ありません。

class Helper
{
  public static function usefulMethod()
  {
     // do something useful here
  }
}

これは、次のようにどこからでもアクセスできるようになりました。

Helper::usefulMethod()

次の点については、さらに説明が必要です。疑似コードにコメントとして追加しました。

// always start your class names with upper case letter, it's a good convention
class Main
{
    // don't make this private if you want to access from the child classes too
    // private $test;

    // instead make it protected, so all sub classes can derive
    protected $test;

    public function __construct()
    {
        //do some stuff
    }

    public function getTest()
    {
        echo 'public call: '.$this->test;
    }

    private function randomFunc()
    {
        echo 'hello';
    }
}

class Child1 extends Main
{
    public function __construct()
    {
        // $test is now derived from the parent into the sub class
        $this->test = 'child1 here';
    }
}


class Child2 extends Main
{
    public function __construct()
    {
        // this doesn't quite work like expected:
        // echo 'private call: '.$this->test; //i want this to say "private call: child1 here"

        // because this isn't a reference, but think of every class instance
        // as a container which holds its own properties and methods (variables and functions)
        // if you really want to do it like intended then you would need a subclass from main1
        // but that is kind of strange, I don't know exactly what you want to achieve

        // this will print out 'hello' as expected
        parent::randomFunc();
    }
}

これですべてが解決するわけではないと思いますが、最善を尽くしました。たぶん、あなたの意図をもう少し提案することができます

于 2012-06-06T22:15:59.023 に答える