我的问题是这个(在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的功能。
我该如何实施?
注意:我写了这个基本代码来说明问题。不要考虑语法错误。
答案 0 :(得分: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;
}
}
答案 1 :(得分: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.
}
}
答案 2 :(得分: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();
?>