小编Thi*_*eek的帖子

为什么PHP允许抽象静态函数

请考虑以下代码:

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中允许抽象静态函数,当它们是荒谬的时候?

php interpreter abstract-class abstract-function

9
推荐指数
2
解决办法
5228
查看次数

使用PHPUnit/Phake模拟一个在PHP中返回Generator的函数

可以说我有以下界面:

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)?

php phpunit unit-testing generator phake

6
推荐指数
2
解决办法
1538
查看次数