php 7.3-类常量作为默认参数值崩溃

时间:2019-01-26 00:13:22

标签: php default-value

我有一些已经使用了很长时间的代码,但是现在却产生了令人困惑的错误。我必须假设这是由于我转向php 7.3引起的,但是我找不到任何可以解释发生情况的参考。

我在类中有一个类似于以下内容的方法:

class Foo {

    function bar($param = OtherClass::MY_CONSTANT) {
        logger(__METHOD__);
        logger(OtherClass::MY_CONSTANT);
        logger($param);
        logger('ready to do stuff');

        // does stuff
    }
}

其中OtherClass :: MY_CONSTANT = 1。

当我从另一个类中调用该方法时:

$foo = new Foo();
$foo->bar();

输出类似于:

DEBUG - Foo::bar
DEBUG - 1

然后php的执行突然停止,甚至没有调用我注册的关闭函数。我可以直接在方法的主体中使用类常量,但是默认情况下,我无法使用设置为类常量值的参数。

如果我将方法更改为

function bar($param = 1) {

一切正常。

此外,如果我在调用该方法时传递常量,那么它将起作用:

$foo = new Foo();
$foo->bar(OtherClass::MY_CONSTANT);

我得到快乐

DEBUG - Foo::bar
DEBUG - 1
DEBUG - 1
DEBUG - ready to do stuff

执行正常。

使用类常量作为默认值会使变量变得有毒,即使我可以在方法中使用类常量也没有任何麻烦。

我试图创建一个简单的单文件示例来重现此问题,但它工作得很好。奥格。

在php 7.3中是否进行了某些更改,会导致此行为?我刚刚升级到7.3.1,但问题仍然存在。我应该使用更好的做法吗?

编辑添加:

在尝试制作一个简单的案例来重现此问题后,我不得不继续前进。相关因素包括:

  • 在php-fpm中运行
  • 关闭与浏览器的连接后,代码将运行。
  • 即使是同一类(self::MY_CONSTANT)中的常量也会创建有毒变量

我的解决方案是回滚到正常运行的php 7.2.14。我只能在php 7.3的一个错误中假定这一点。

1 个答案:

答案 0 :(得分:1)

作为解决方法,您可以这样做:

[SBV Person]

这假设*Main> cspAncestors Solution #1: person = Claudia :: Person Solution #2: person = Stephen :: Person Found 2 different solutions. 对于该参数不是有效值;如果有的话,请用其他无效值替换它。如果参数可以合法地是任何值,则此解决方法将不起作用。