gpt4 book ai didi

php - 从 PHP 中的父类访问具有冲突名称的子属性

转载 作者:搜寻专家 更新时间:2023-10-31 20:51:37 24 4
gpt4 key购买 nike

当父类和子类共享相同的属性名称但具有不同的可见性时,是否可以从父类访问子属性?

考虑以下示例:

abstract class A {
private $n = 1;

public function getN() {
return $this->n;
}
}

class B extends A {
protected $n = 2;
}

$b = new B;
echo $b->getN(); // returns 1

getN()返回1,因为它返回的是自己私有(private)的$n的值。

是否有可能从父代获取子代 protected $n 的值?

最佳答案

通常情况下,您不能。您必须声明 A::$n protectedpublic,因为私有(private)成员始终具有优先权。如果您将 A::$n 声明为 public,则 B::$n 也需要是 public,因为您无法覆盖可见性低于其父级的属性。您只能使用 Reflection API 来做到这一点:

abstract class A {
private $n = 1;

public function getN() {
$ref = new ReflectionProperty($this, 'n');
$ref->setAccessible(true);
echo $ref->getValue($this);
}
}

class B extends A {
protected $n = 2;
}

$b = new B;
echo $b->getN(); // 2

关于php - 从 PHP 中的父类访问具有冲突名称的子属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6876590/

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