Php 为什么模拟对象有错误的类型提示?

Php 为什么模拟对象有错误的类型提示?,php,zend-framework,phpunit,Php,Zend Framework,Phpunit,尝试对需要Zend_Config对象类型的方法执行Zend_Config的简单模拟,但该模拟返回的是mock_Zend_Config类型 当然,我在这么晚的时候错过了一些东西,我在函数调用中显然是错的,但是我没有发现我的错误 $config = $this->getMock("Zend_Config"); 返回Mock_Zend_Config,并且我的对象必须是Zend_Config类型。在备忘单中查找函数签名,并将方法调用更改为: $config = $this->getMoc

尝试对需要Zend_Config对象类型的方法执行Zend_Config的简单模拟,但该模拟返回的是mock_Zend_Config类型

当然,我在这么晚的时候错过了一些东西,我在函数调用中显然是错的,但是我没有发现我的错误

$config = $this->getMock("Zend_Config"); 
返回Mock_Zend_Config,并且我的对象必须是Zend_Config类型。在备忘单中查找函数签名,并将方法调用更改为:

$config = $this->getMock("Zend_Config", array(), array($confArray),"Zend_Config",true); 
此版本生成一个致命错误,消息为“Zend_配置已存在”

在旁注上,可能与phpunit本身无关,但是typehint不会像它应该的那样生成致命错误,并且在没有测试的情况下运行时会生成致命错误


知道我在la mock中遗漏了什么吗?

mock对象扩展了mock对象。任何扩展
Zend\u Config
的类都将满足
Zend\u Config
的类型提示,因为根据定义,模拟Zend\u Config扩展了
Zend\u Config
,因此是一个
Zend\u Config
。因此,当您尝试将模拟命名为它扩展的类时,将出现一个致命错误,如果您不这样做,则不会出现任何错误。

模拟对象扩展模拟对象。任何扩展
Zend\u Config
的类都将满足
Zend\u Config
的类型提示,因为根据定义,模拟Zend\u Config扩展了
Zend\u Config
,因此是一个
Zend\u Config
。因此,当您尝试将mock命名为它扩展的类时,会出现致命错误,如果您不这样做,则不会出现错误。

只需加载项:如果您需要特定的类名,请使用类似“My_Mocked_Zend_Config”的名称。还要查看$this->getMockBuilder()->。。。该API比->getMock()只是插件要好得多:如果需要特定的类名,请使用类似“My_Mocked_Zend_Config”的名称。还要查看$this->getMockBuilder()->。。。API比->getMock()好得多