为什么这个$ class工作,$ this->类不?

时间:2016-05-16 10:13:05

标签: php class oop instance

我有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

3 个答案:

答案 0 :(得分:5)

原因是

$class = $this->class;
return new $class();

此处$class将包含值“A”。因此,当您调用新的$class()

时,它会获得“A”类

但是在

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