2

作成が関数のスコープ内にない場合、PHP では ClassA 内に ClassB の新しいインスタンスを作成できないことを理解しています。それとも私が理解していないだけ...

class ClassA {

const ASD = 0;
protected $_asd = array();
//and so on

protected $_myVar = new ClassB(); // here I get *syntax error, unexpected 'new'* underlining 'new'

// functions and so on
}

ある種のコンストラクターが必要ですか、それとも Java や C# で慣れているように、実際にオブジェクト インスタンスを自由な方法で自由に作成する方法はありますか。または、Singleton を使用するのが私のアプローチに最も近い唯一のソリューションですか?

PS ClassB は、ClassA と同じパッケージおよびフォルダーにあります。

4

2 に答える 2

4

PHPドキュメントによると:

宣言には初期化を含めることができますが、この初期化は定数値でなければなりません。つまり、コンパイル時に評価できる必要があり、評価するために実行時の情報に依存してはなりません。

$_myVarそのため、コンストラクターでインスタンス化する必要があります。

protected $_myVar;    

public function __contruct() {
   $this->_myVar = new ClassB();
}
于 2013-11-05T16:17:44.100 に答える
2

はい、コンストラクターがあります(以下を参照)

class ClassA {

    const ASD = 0;
    protected $_asd = array();
    //and so on

    protected $_myVar; // initialization not allowed directly here

        public function __contruct() {
            $this->_myVar = new ClassB();
        }
    }
于 2013-11-05T16:17:44.880 に答える