我有2个班级
class A {
// Do some stuff here!
}
和
class B {
public $class = 'A';
public function getClass(){
//Case 1
$class = $this->class;
return new $class(); //work
//Case 2
return new $this->class(); //NOT work
//or to be precise something like this
return new {$this->class}();
}
// Do some other stuff here!
}
为什么将class属性传递给var work并直接访问NOT,就像你在上面的课程中看到的那样,案例1 与案例2 ?
答案 0 :(得分:5)
原因是
$class = $this->class;
return new $class();
此处$class
将包含值“A”。因此,当您调用新的$class()
但是在
return new $this->class();
它将在类“B”中搜索函数class()
。所以它不会起作用。
$this
用于表示当前的类实例。 $this -> something()
将始终检查同一类中的函数something()
答案 1 :(得分:0)
是的,原因是你做错了,
这就是你要做的,
class A {
public $class = 'A';
function __construct() {
# code...
}
public function getClass(){
return $this;
}
public function instance () {
return $this->class;
}
}
获取对象/ A
$obj = new A();
$new_obj = $obj->getClass();
获取instance / $ class的值,
$inst = $obj->instance();
$this
指的是班级本身,
答案 2 :(得分:0)
如果我删除'()' :),似乎对我有用。
return new $this->class; //Work just fine without parentheses
注意:我使用PHP 5.4.16