1

我的问题是这个(在 PHP 中):

我有三个班,

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.
    }
}

我无法通过 cls2 的方式从 cls3 到达 cls1 的功能。

我该如何实施?

注意:我编写了这个基本代码来显示问题。不要考虑语法错误。

4

3 回答 3

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 回答
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 回答
1

这可能是一种不好的做法。当您可以简单地在第二个类中扩展第一个类时,为什么要创建一个类并将其实例化到另一个类中。

<?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 回答