2012-05-05 12 views
0

私はPHPには新しいので、質問はダンプです。私はf()でそれを見るために$objを初期化する必要がありFatal error: Call to a member function ff() on a non-object in ...クラスフィールドをオブジェクトで初期化する

どのように取得f()に次のコード

class A { 
    private $obj; 

    public function A() { 
     $this->obj = new Obj(); 
     //$this->obj->fff() works here; 
     //still var_dump($this->obj) prints NULL here 
    } 

    public f() { 
     //$this->obj is NULL here!!! 
     //$this->obj->ff() throws an error 
    } 
} 

UPDを見てみましょうか?

ありがとうございます!

+1

これはf()内の内容によって異なります。クローン作成が必須の場合、オブジェクト構築のための単純な新しい演算子を使用した初期化が失敗することがあります。 –

答えて

3

は、以下のことを試してみてください。

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

私はこの問題は、あなたがfunctionを逃したと思います。私は実際にPHP男ではないが、私はpublic function A()もうまくいくと思うが、__constructが好ましい。

編集:今、あなたはfunctionを追加しました。私の答えがあなたを助けてくれるかどうかは分かりません。

+0

はい、私は質問を掲示している間に 'function'を見逃しました。残念ながら '__construct()'は役に立ちません。とにかくお返事ありがとう! – Eugeny89

+0

それから、 'new Obj()'が動作しないかもしれません。コンストラクタ内部には何がありますか? –

+0

また、 'public f()'または 'public function f()'ですか? –

1

あなたは、クラス名と類似だ関数名A()に誤りがあります。 $a = new A;を呼び出すと、AクラスのA()メソッドが呼び出されます。代わりに__construct()を使用してください。私のサーバー上で

これが正常に動作します:あなたはObjクラスでの問題を持っているよう

<?php 

class A { 

    private $obj; 

    public function A() { 

     $this->obj = new stdClass(); 

    } 

    public function f() { 

     var_dump($this->obj); 

    } 

} 

$aa = new A; 

$aa->f(); // Prints `object(stdClass)#2 (0) { }` 

?> 

が見えます。あなたのクラス定義にをpublic f() {に入れてみませんか?

+0

'A()'を構造体に変更することは役に立たないようです。質問 – Eugeny89

+0

更新された答えを見てください。 P.S. Арусскийтутвидно? ) –

+0

ありがとう! Конечновидно!!! – Eugeny89

関連する問題