gpt4 book ai didi

php - PHP 5.3 之前的静态继承

转载 作者:可可西里 更新时间:2023-11-01 00:16:19 26 4
gpt4 key购买 nike

class A
{
static $v = "A";

static function echoExtendedStaticVariable() {
echo self::$v;
}
}

class B extends A
{
static $v = "B";
// override A's variable with "B"
}

为什么:

echo B::$v

打印“A”?

我如何让它打印“B”?

在 PHP 5.3 之前有办法做到这一点吗?

最佳答案

B->echoExtendedStaticVariable() == 'A' 因为 self:: 是在编译时计算的,而不是运行时.这就好像你写的是 A:: 而不是 self::

您想要的是一种称为“后期静态绑定(bind)”的功能——它之所以“后期”是因为它可以在运行时而非编译时确定类。

您可以使用 ReflectionClass 在 PHP 5.2 中模拟此(某种):

class A
{
static $v = "A";
function echoExtendedStaticVariable() {
$rc = new ReflectionClass($this);
echo $rc->getStaticPropertyValue('v');
}
}
class B extends A
{
static $v = "B";
}
$b = new B();
$b->echoExtendedStaticVariable(); // B

请注意,您只能在有权访问实例的情况下执行此操作,因此您不能将 echoExtendedStaticVariable 设为静态方法并期望它起作用。

关于php - PHP 5.3 之前的静态继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8581435/

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