我今天有一个奇怪的错误(困扰我)。涉及三个继承级别:
爷爷:
abstract class Zend_Db_Table_Row_Abstract implements ArrayAccess,
IteratorAggregate
{
protected $_data = array();
/* snip */
}
妈妈:
namespace Survey\Db\Table\Row;
class AbstractRow extends \Zend_Db_Table_Row_Abstract
{
/* snip */
}
孩子:
namespace Survey\Db\Table\Row;
class SurveyItem extends AbstractRow implements ISkippable
{
/* snip */
}
例外:
Type: ErrorException
Value: Undefined property: Survey\Db\Table\Row\SurveyItem::$_data
Location: [...]/Zend/Db/Table/Row/Abstract.php in handleError , line 177
第 177 行似乎无关紧要,但我添加它只是为了让您相信我;)
if (!array_key_exists($columnName, $this->_data)) {
PHP 5.4.11,PHP 5.4.8 不存在问题
当我看到Bug #63462 Magic methods called two for unset protected properties的修复程序时,我想,这会解决问题,因为这个错误会导致我看到的奇怪的意外结果。
但事实证明,更新到 PHP 5.4.12 后问题依然存在。PHP 中存在另一个类似错误的可能性似乎很高。
问题:
我得到的信息是爷爷中定义的受保护字段在孩子中未定义。什么情况会导致这样的结果?