2012-02-18 13 views
0

可能性の重複:
Instance as a static class propertyクラスプロパティで「new」キーワードを使用できないのはなぜですか?

私は属性としてクラスのオブジェクトを作成する方法について問題を得ました。

include 'Bar.php'; 
class Foo() 
{ 
    private $bar = new Bar(); 
} 

解析エラーが発生します。しかし、私が$ barをサイト外クラスに入れたとき

include 'Bar.php'; 
class Foo() 
{ 
    //private $bar = new Bar(); 
} 
$bar = new Bar(); 

構文エラーはありません。完璧に動作します。だから問題は何ですか。私はJavaの知識をPHPに移植しました。時には、それはとても混乱します。

+0

それは不可能です。なぜ、それをチェックアウトするのかについての長い議論があります:[なぜPHP属性は関数を許さないのですか?](@stackoverflow.com/q/3960323) –

+0

@Pekka:それは分かりませんでした。どうも! –

+0

詳細:http://stackoverflow.com/search?q=[php]+body%3A%22initialization+must+be+a+constant+value%22 – Gordon

答えて

2

あなたはコンストラクタにそれを置く必要があります:

class Foo() { 
    private $bar; 
    function __construct() { 
     $this->bar = new Bar(); 
    } 
} 
+0

抽象クラス/基本クラスのオブジェクトプロパティは、継承された各クラスのすべてのコンストラクタで初期化する必要があります。とてもうるさい。 –

+1

親コンストラクターを呼び出すだけで、ジョブを実行します。 –

+0

ニースですが、これを忘れるのは簡単です。 –

0
class Foo { 
    private $bar; 

    public function __construct() { 
     $this->bar = new Bar(); 
    } 

    public function check() { 
     return $this->bar->checkBack(); 
    } 
} 

class Bar { 
    public function __construct() { 
    print "good\n"; 
    } 

    public function checkBack() { 
    return "checked"; 
    } 
} 

$f = new Foo(); 
print $f->check(); 
関連する問題