2014-06-29 16 views
5

Ich entschied mich, ein Update auf die PHP-Version, die ich verwende, von 5.4.7 bis 5.4.30 zu tun. Es war eine ziemliche Überraschung zu sehen, dass einige Skripte, die DatePeriod erweiterten, begannen, Fehlermeldungen zu werfen.Schreiben in DatePeriod-Eigenschaften wird nicht unterstützt?

Hier ist ein Beispielcode aus dem später erwähnten Fehlerbericht.

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

Überraschenderweise eine Suche nach der Fehlermeldung:

Schreiben auf DatePeriod Eigenschaften wird nicht unterstützt

fast keine brauchbaren Ergebnisse zurückgegeben, nur den Fehlerbericht Bug #65672 Broken classes inherited from DatePeriod.

Fehle ich hier etwas?

Antwort

9

Wow, was für eine Änderung am Code. Leider vermisst du nichts. Der Fix für bug 53437 war sehr schlecht durchdacht und rückwärtskompatibel. Ich habe mir den Patch angeschaut, der angewendet wurde - jeder Schreibzugriff auf Eigenschaften aus Userland-Code ist in der Tat strengstens verboten. Dieser Patch sollte nicht in PHP akzeptiert worden sein, und diese Einschränkung sollte rückgängig gemacht werden, während auch eine Korrektur für den ursprünglichen Fehler neu erstellt wird.

Sie werden keine Abhilfe für die Erweiterung der DatePeriod Klasse, und das Problem ist unwahrscheinlich, finden in absehbarer Zeit ausgebessert werden. Es scheint, dass Ihre einzige Option darin besteht, Ihre zusätzlichen Funktionen mithilfe einer Wrapper-Klasse zu implementieren, anstatt direkt von DatePeriod zu erben.

Verwandte Themen