php – 在什么情况下,父域是否可能不被继承?

前端之家收集整理的这篇文章主要介绍了php – 在什么情况下,父域是否可能不被继承?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
今天有一个奇怪的错误(bug我).有三个继承层面涉及:

爷爷:

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,problem did NOT exist with PHP 5.4.8

当我看到Bug #63462 Magic methods called twice for unset protected properties Bug #63462 Magic methods called twice for unset protected properties时,我想,这个问题解决了这个问题,因为这个bug导致了我看到的奇怪的意想不到的结果.

但事实证明,更新到PHP 5.4.12后仍然存在问题.在PHP中有一个类似错误的可能性似乎相当高.

题:

我获得了在爷爷中定义的保护字段在孩子中未定义的信息.什么情况可以导致这样的结果?

以下片段在PHP 5.4.9中完美无缺:
class A
{
    protected $foo = 'hello';
    public function bar()
    {
        echo $this->foo;
    }
}

class B extends A {}

class C extends B {}

$c = new C();
$c->bar();

请尽可能减少您的代码一步一步看看是否/何时出现问题(我不知道为什么你还没有做)

如果您确定这对PHP 5.4.8有效,并且不适用于PHP 5.4.11,那么您在PHP中发现了一个错误,应该在PHP.net上报告

答案可能会有所不同(或许这样做简直就是“不了”).尽可能减少你的代码,你会知道.

猜你在找的PHP相关文章