ReflectionClass中的未定义方法错误,但方法存在

时间:2015-07-08 02:32:23

标签: php reflection

我目前正在使用phpunit进行单元测试。由于存在一些受保护的方法,我不得不使用Reflection Class将这些方法的可见性更改为public

初始方法被成功调用,但不知何故它被卡在特定方法中:

Fatal error: Call to undefined method ReflectionClass::create_schema()in
/vagrant/fuelphp/fuel/app/tests/model/repository/jobpost.php on line 54

但是,使用get_method()通过var_dump转储该方法证明它存在于类实例中:

class ReflectionMethod#2317 (2) {
  public $name =>
  string(13) 'create_schema'
  public $class =>
  string(34) 'Model_Repository_Feed'
}

然后真正令人困惑的一点,我决定使用hasMethod()来查看该方法是否存在:

 52     echo "If this says 1, class exists: ".$this->_target->hasMethod('create_schema');
 53     try {
 54         $this->_target->create_schema();
 55     }

跑步时的结果是,"是的它存在......但它没有":

If this says 1, class exists: 1
Fatal error: Call to undefined method ReflectionClass::create_schema() in /vagrant/fuelphp/fuel/app/tests/model/repository/jobpost.php on line 54

澄清此方法是公开的,并且是从abstract父类继承的:

public function create_schema() {
    $this->create_schema_exec(self::$_real_schema_name);
  }

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

你需要获取保存方法而不是反射对象的类的对象。

$reflection = new ReflectionClass($className);
$object = $reflection->newInstanceWithoutConstructor();
$object->methodName();