0

コンストラクターを作成せずに、どうにかして新しい変数を割り当てることができるかどうかを知りたいです。

初期のプライベート クラス変数を設定するためだけに、すべてのクラスにコンストラクターを作成するのはかなりやり過ぎのようです。

これが私が達成したいことの私の例です

<?php

class MyClass {
    public function DoSomething() {
        echo '1';
    }
}

class MySecondClass {
    private $obj = new MyClass(); // Error

    /*
        // This works, but I don't like it, I think it's total overkill
        function __construct() {
            $this->obj = new MyClass();
        }
    */

    public function PrintOne() {
        $this->obj->DoSomething();
    }
}

$class = new MySecondClass();
$class->PrintOne();

完全に明確なように、ここにエラーメッセージがあります

構文エラー、10 行目の予期しない 'new' (T_NEW)

4

2 に答える 2

2

できません(私が知っていることです)。コンストラクターでインスタンス化するか(オプションA)、オブジェクトを渡す必要があります(オプションB)

オプション A:

class MySecondClass {
    private $obj;

    function __construct() {
       $this->obj = new MyClass();
    }

    public function PrintOne() {
        $this->obj->DoSomething();
    }
}

オプション B:

class MySecondClass {
    private $obj;

    function __construct(MyClass $obj) {
       $this->obj = $obj;
    }

    public function PrintOne() {
        $this->obj->DoSomething();
    }
}
于 2013-07-23T18:53:08.147 に答える
0

その方法ではそれを行うことはできません。プロパティを初期化することはできますが、それらは定数値である必要があり、関数の結果やクラスのインスタンス化を試みたものではありません。

http://www.php.net/manual/en/language.oop5.properties.php

IMO、クラスのコンストラクター内で新しいオブジェクトをインスタンス化しないでください。オブジェクトを作成するための引数としてそれらを渡す必要があります。

于 2013-07-23T18:55:35.377 に答える