加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 16:38:51 所属栏目:PHP教程 来源:网络整理
导读:今天有一个奇怪的错误(bug我).有三个继承层面涉及: 爷爷: abstract class Zend_Db_Table_Row_Abstract implements ArrayAccess,IteratorAggregate{ protected $_data = array(); /* snip */} 妈妈: namespace SurveyDbTableRow;class AbstractRow exte
今天有一个奇怪的错误(bug我).有三个继承层面涉及:

爷爷:

abstract class Zend_Db_Table_Row_Abstract implements ArrayAccess,IteratorAggregate
{
    protected $_data = array();

    /* snip */
}

妈妈:

namespace SurveyDbTableRow;

class AbstractRow extends Zend_Db_Table_Row_Abstract
{
    /* snip */
}

儿童:

namespace SurveyDbTableRow;

class SurveyItem extends AbstractRow implements ISkippable
{
    /* snip */
}

例外:

Type:     ErrorException  
Value:    Undefined property: SurveyDbTableRowSurveyItem::$_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上报告

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读