PHP Reflection中的PHP ReflectionMethod invoke()输出不一致

时间:2013-12-01 04:38:14

标签: php reflection phpunit

我在PHPUnit中使用php类反射时遇到了一个奇怪的情况。以下是我在直接课堂上的表现,它会产生" ChildClass"来自get_called_class(),正如我所料:

class ParentClass {
    static function funcA() {
        echo get_called_class() . PHP_EOL;
    }
}

class ChildClass extends ParentClass {
}

class MyTest {
    public function test() {
        $reflectionClass = new ReflectionClass('ChildClass');
        var_dump($reflectionClass);
        $reflectionClass->getMethod('funcA')->invoke(null);
    }
}

$object = new MyTest;
$object->test();

输出:

object(ReflectionClass)#2 (1) {
  ["name"]=>
  string(10) "ChildClass"
}
ChildClass

但是如果我将它包装在PHPUnit测试用例中,则get_called_class()echo" ParentClass"。它肯定改变了Reflection类的调用方法的行为。我错过了PHPUnit或PHP ReflectionClass本身的任何内容吗?

class MyTest extends PHPUnit_Framework_TestCase {
    public function testReflection() {
        $reflectionClass = new ReflectionClass('ChildClass');
        var_dump($reflectionClass);
        $reflectionClass->getMethod('funcA')->invoke(null);
    }
}

这是输出,注意最后一行,它显示" ParentClass"

PHPUnit 3.7.28 by Sebastian Bergmann.

.class ReflectionClass#221 (1) {
  public $name =>
  string(10) "ChildClass"
}
ParentClass

1 个答案:

答案 0 :(得分:0)

感谢@zerkms从输出中指出明显的差异。我用不同的PHP版本再次测试它。它描述了5.3.3的问题,但没有描述5.5.3。这可能是PHPUnit网站有这一行的原因,“PHPUnit 3.7需要PHP 5.3.3(或更高版本),但强烈建议使用PHP 5.5.1(或更高版本)。”