1

私の問題はこれです(PHPの場合):

私は3つのクラスを持っています、

Class cls1 {
    public function myfunc() {

    }
}
Class cls2 {
    private $_obj1; //type of cls1
    ...
    public function getObj1() {
        return $_obj1;
    }
}

Class cls3 {
    ...
    public function getMyFunc() {
        $temp = new cls2();
        $temp->getObj1()->myfunc(); //THIS IS NOT WORKING.
        //PHP Throws an error like : Fatal error: Call to a member function getId() on a non-object in xyz.php on line 125.
    }
}

cls3 から cls2 経由で cls1 の関数に到達できません。

どうすれば実装できますか?

注:この基本的なコードを書いて、問題を示しました。構文エラーについては考慮しないでください。

4

3 に答える 3

2

Object1はまだインスタンス化されていません。

Class cls1 {
    public function myfunc() {

    }
}
Class cls2 {
    private $_obj1; //type of cls1
    ...
    public function getObj1() {
        if(!$this->$_obj1 instanceof cls1) {
            $this->_obj = new cls1();
        }
        return $_obj1;
    }
}

Class cls3 {
    ...
    public function getMyFunc() {
        $temp = new cls2();
        $temp->getObj1()->myfunc(); //THIS IS NOT WORKING.
    }
}
于 2012-09-07T12:11:17.013 に答える
2

$temp オブジェクトを取得する前に、その $_obj1 プロパティをインスタンス化する必要があります。たとえば、 cls2 コンストラクターでそれを行います。また、 this キーワードを使用してインスタンスを参照し、クラス内でプライベート プロパティを正しく参照する必要があります。

Class cls2 {
    private $_obj1; //type of cls1
    ...
    public function __construct(){
        $this->_obj1 = new cls1();
    }

    public function getObj1() {
        return $this->_obj1;
    }
}
于 2012-09-07T12:09:16.490 に答える
1

それはおそらくそれを行う悪い方法です。最初のクラスを 2 番目のクラスで単純に拡張できるのに、クラスを作成して別のクラスでインスタンス化する理由..

<?php
class cls1 {
    public function myFunc() {
        echo "I am myFunc!";
    }
}
class cls2 extends cls1 {
    public function getObj1() {
        return $obj1;
    }
}
class cls3 {
    public function getMyFunc() {
        $temp = new cls2();
        $temp->myFunc();
    }
}
$a = new cls3();
$a->getMyFunc();
?>
于 2012-09-07T12:18:50.603 に答える