Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHPUnit中PHP ReflectionMethod invoke()的输出不一致_Php_Reflection_Phpunit - Fatal编程技术网

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

PHPUnit中PHP ReflectionMethod invoke()的输出不一致,php,reflection,phpunit,Php,Reflection,Phpunit,在PHPUnit中使用php类反射时,我遇到了一个奇怪的情况。下面是我在straight类中的操作,它从get_生成“ChildClass”,称为_class(),正如我所期望的那样: class ParentClass { static function funcA() { echo get_called_class() . PHP_EOL; } } class ChildClass extends ParentClass { } class MyTest

在PHPUnit中使用php类反射时,我遇到了一个奇怪的情况。下面是我在straight类中的操作,它从get_生成“ChildClass”,称为_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_称为_class()回显“ParentClass”。它确实改变了在反射类上调用方法的行为。我是否错过了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”


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

它是在相同的PHP版本下运行的吗?
var\u dump($reflectionClass)是如何可能的
在两个示例中都不同吗?是的,它们都在我的CentOS VM上的相同环境下运行。实际上,var_dump($reflectionClass)给出了相同的结果。但是从getMethod()调用ReflectionMethod上的invoke()会得到不同的结果。“实际上,var_dump($reflectionClass)会得到相同的结果”——在你的问题中,它们是不同的。啊,我的错。它们确实不同。我怎么会看不到呢。他们似乎是不同的对象。那么,如何转储“类”而不是“对象”?我尝试了$reflectionClass->\uuuuToString(),它的输出不是这样的。我不相信我们可以改变PHP核心函数。事实上,我从未见过
类ReflectionClass#221
输出
PHPUnit 3.7.28 by Sebastian Bergmann.

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