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