您好,欢迎来到二三娱乐。
搜索
您的当前位置:首页php私有属性的继承,PHP继承的父方法无法访问子属性的私有属性

php私有属性的继承,PHP继承的父方法无法访问子属性的私有属性

来源:二三娱乐

首先:已经发布了一个

quite similar problem并且已经以某种方式解决了,但仍然没有回答我的具体问题.稍后会详细介绍.

用语言:我有一个基类,为所有子项提供一些方法,但不包含任何属性.我的孩子继承了这些方法,这些方法应该用于访问孩子的属性.

如果孩子的财产受到保护或公开,一切正常,但如果孩子的财产是私人的,它就会失败而没有错误(没有任何反应).

在代码中:

class MyBaseClass {

public function __set($name, $value) {

if(!property_exists($this, $name))

throw new Exception("Property '$name' does not exist!");

$this->$name = $value;

}

}

class ChildClass extends MyBaseClass {

public $publicProperty;

protected $protectedProperty;

private $privateProperty;

}

$myChild = new ChildClass();

$myChild->publicProperty = 'hello world'; //works of course!

$myChild->protectedProperty = 'hello world'; //works as expected

$myChild->privateProperty = 'hello world'; //doesn't work?

上面提到的类似问题得到了使用magic __set()方法来访问私有属性的解决方案,但我已经这样做了.如果我在子进程中实现__set(),它当然是有效的,但是想法是,子进程从父进程继承了__set(),但很明显它无法访问子进程的私有方法.

这是故意的吗?我做错了吗?或者我的方法只是废话设计?

背景:

我最初的想法是:关于__set()的整个动态是我不喜欢的.通常永远不能从外部访问私有属性,因此我在我的最终基类中实现了抛出__set-和__get-methods(所有类都继承).

现在我想从XML文件动态生成一个实例,因此需要访问属性.我制定了规则,任何XML可实例化的类都需要实现magic __set()方法,因此可以动态创建.我决定让它们继承自类似Spawnable {}的类,而不是在每天可能生成的每个类中实现它,它提供了所需的__set方法.

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- yule263.com 版权所有 湘ICP备2023023988号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务