是否不支持写入DatePeriod属性?

时间:2014-06-29 12:47:13

标签: php

我决定对我使用的PHP版本进行更新,从5.4.7到5.4.30。令人惊讶的是,一些扩展DatePeriod的脚本开始抛出错误消息。

以下是后面提到的错误报告中的代码示例。

<?php
class Period extends \DatePeriod
{
    public $test;
}

$p = new Period(new \DateTime('now'), new \DateInterval('P1Y'), new \DateTime('tomorrow'));
$p->test = false;

var_dump($p);

令人惊讶的是在错误消息之后搜索:

  

不支持写入DatePeriod属性

几乎没有任何有用的结果,只是错误报告Bug #65672 Broken classes inherited from DatePeriod

我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:10)

哇,代码有什么变化。不幸的是,你不会遗漏任何东西。 bug 53437的修复程序经过深思熟虑,破坏了向后兼容性。我查看了应用的补丁 - 确实严格禁止对userland代码中的属性进行所有写访问。这个补丁不应该被PHP接受,应该还原这个限制,同时重新设计原始bug的修复。

您将找不到扩展DatePeriod类的解决方法,并且该问题不太可能很快得到修补。看来你唯一的选择就是使用包装类来实现你的附加功能,而不是直接从DatePeriod继承。