请考虑以下代码:
abstract class ExampleClass
{
public static function regularStaticFunction()
{
return static::abstractStaticFunction();
}
abstract protected static function abstractStaticFunction();
}
ExampleClass::regularStaticFunction();
Run Code Online (Sandbox Code Playgroud)
PhpStorm IDE对声明的声明发出警告abstractStaticFunction:
PHP严格标准:静态函数'abstractStaticFunction'不应该是抽象的.
静态函数不应该是抽象的.
但是,PHP在解析此类时会继续执行程序并输出以下内容:
PHP严格标准:静态函数ExampleClass :: abstractStaticFunction()在第7行的php shell代码中不应该是抽象的
在我看来,因为PHP允许对抽象类进行静态函数调用,所以不应该在抽象类上定义抽象静态函数.
为什么解释器在PHP中允许抽象静态函数,当它们是荒谬的时候?
可以说我有以下界面:
interface MyInterface
{
public function yieldData();
}
Run Code Online (Sandbox Code Playgroud)
我想创建一个这个界面的模拟,例如:
$mocked_instance = Phake::partialMock(MyInterface::class);
Run Code Online (Sandbox Code Playgroud)
模拟yield方法的最佳方法是什么?这是我想出的最好的:
Phake::when($mocked_instance)->yieldData()->thenReturn([]);
Run Code Online (Sandbox Code Playgroud)
有没有办法在PHPUnit/Phake中实现这一点,它更接近函数的原始功能(即返回Generator)?