Ich habe heute einen neugierigen Bug (nervt mich). Es gibt drei Vererbungs Ebenen beteiligt: Unter welchen Umständen können Elternfelder nicht vererbt werden?
Opa:
abstract class Zend_Db_Table_Row_Abstract implements ArrayAccess,
IteratorAggregate
{
protected $_data = array();
/* snip */
}
Mom:
namespace Survey\Db\Table\Row;
class AbstractRow extends \Zend_Db_Table_Row_Abstract
{
/* snip */
}
Kinder:
namespace Survey\Db\Table\Row;
class SurveyItem extends AbstractRow implements ISkippable
{
/* snip */
}
Ausnahme:
Type: ErrorException
Value: Undefined property: Survey\Db\Table\Row\SurveyItem::$_data
Location: [...]/Zend/Db/Table/Row/Abstract.php in handleError , line 177
Linie 177 scheint nicht relevant zu sein, aber ich hinzufüge es nur, damit Sie mir glauben würde;)
if (!array_key_exists($columnName, $this->_data)) {
PHP 5.4.11 , Problem mit PHP hat keinen 5.4.8
existieren Als ich die fix für Bug #63462 Magic methods called twice for unset protected properties sah, dachte ich, dass wold löse das Problem, da dieser Bug genau zu dem seltsamen unerwarteten Ergebnis führt, das ich sah.
Aber es stellt sich heraus, das Problem existiert immer noch nach der Aktualisierung auf PHP 5.4.12. Die Wahrscheinlichkeit, dass es einen ähnlichen PHP-Fehler gibt, erscheint ziemlich hoch.
Frage:
bekomme ich die Info, dass ein geschütztes Feld in dem Opa definiert ist im Kind nicht definiert. Welche Szenarien können zu einem solchen Ergebnis führen?
Können Sie der Referenz von '$ this -> _ data' etwas mehr Kontext hinzufügen. Schließen Sie die Klasse und die Methode ein, aus der sie referenziert wird. Der Code, wie Sie geschrieben haben, sieht aus wie Kind sollte Zugriff auf die Member-Var, ich frage mich, ob Sie Namespace AbstractRow bei der Erweiterung über SurveyItem benötigen. –
Ich habe dies auf 5.3.20 versucht, mit leeren Klassen (die Eltern und Kind-Klassen abstrakt machen, so dass es kompiliert) und es ist alles in Ordnung.Versuchen Sie das auf Ihrer aktuellen PHP-Version, um sicherzustellen, dass es nicht etwas in Zend (vielleicht etwas PHP-Magie) ist, das in die Quere kommt? Wenn es jedoch an einer früheren Version 5.4 gearbeitet hat und sich sonst nichts geändert hat, dann muss es ein PHP-Bug sein. – halfer
Es könnte etwas PHP 'Magie' sein. Ich versuche, die Frage zu verbessern, um Ihnen mehr Kontext zu geben. – markus