gpt4 book ai didi

php - 从公共(public)基函数访问类层次结构中的私有(private)属性

转载 作者:搜寻专家 更新时间:2023-10-31 21:40:26 25 4
gpt4 key购买 nike

我想在基类中定义一次方法,然后在类层次结构中的连续构造函数中调用它。每次调用它时,我都希望它对调用它的类的属性进行操作。

比如A是基类,这里定义了方法。 B继承A,C继承B。

当我实例化具体类 C 时,构造函数将调用基类方法,我希望它对 C 的属性进行操作。(这将是一个私有(private)数组,我将在初始化它时填充它)。

然后 C 的构造函数调用 parent::__construct。 B构造函数调用基类方法时,该方法要对B的属性进行操作,B构造函数完成前会调用parent::_construct,A构造函数对属性进行操作A.

我正在研究 LSB,但它无法正常工作,因为 parent::__construct 是一个转发调用。我尝试使用 get_parent_class() 的结果代替 parent::,但是我对 static::propertyName 的调用出错了,因为 propertyName 不是常量。

我该怎么做?

编辑:这是一个代码示例。下面的代码输出“P Q P Q P Q”。我希望它输出“P Q R S T U”。

class A {
private $property = array('P','Q');

function __construct() {
$this->myMethod();
}

public function myMethod() {
foreach ($this->property as $value) {
echo $value . " ";
}
}
}

class B extends A {
private $property = array('R','S');

function __construct()
{
parent::__construct();
$this->myMethod();
}
}

class C extends B {
private $property = array('T','U');

function __construct()
{
parent::__construct();
$this->myMethod();
}
}

$c = new C();

最佳答案

据我所知这是不可能的。在 private 的情况下,变量不可用于方法,在 public/protected 的情况下,它被覆盖。

你可以通过传递得到你想要的结果

$this->property

在这样的每个 myMethod 调用中 -

$this->myMethod($this->property)

并相应地更改您的 myMethod 定义。

关于php - 从公共(public)基函数访问类层次结构中的私有(private)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11772158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com