php – 在什么情况下,父域是否可能不被继承?
今天有一个奇怪的错误(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)) {
当我看到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上报告 答案可能会有所不同(或许这样做简直就是“不了”).尽可能减少你的代码,你会知道. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |