gpt4 book ai didi

抽象父类中的 PHP 静态变量

转载 作者:行者123 更新时间:2023-12-02 04:02:24 24 4
gpt4 key购买 nike

包含问题的快速代码:

abstract class ClassParent {
public static $var1 = "ClassParent";
}

class ClassChild1 extends ClassParent{
public static function setvar1(){
ClassChild1::$var1 = "ClassChild1";
}
}

class ClassChild2 extends ClassParent{
public static function setvar1(){
ClassChild2::$var1 = "ClassChild2";
}
}


ClassChild1::setvar1();

echo ClassChild2::$var1;
// Returns "ClassChild1". Shouldn't this still be "ClassParent"?

我假设以上是预期行为,而不是 PHP 错误。在这种情况下,我如何在父类中声明一个静态变量,该变量将为子类单独处理。换句话说,我希望每个 child 类(class)都有单独的静态值。我必须在子类中专门声明静态变量还是有其他方法?

谢谢!

最佳答案

编辑:经过进一步调查,我认为您所要求的并不是直接可能的,即使使用后期静态绑定(bind)也是如此。其实我有点惊讶。

The answer to this question提供了一些解决方法。

原答案:

<小时/>

在父类中,如果引用以下形式的静态变量:

self::$var

它将在所有继承的类中使用相同的变量(因此所有子类仍将访问父类中的变量)。

这是因为 self 关键字的绑定(bind)是在编译时而不是运行时完成的。

从 PHP 5.3 开始,PHP 使用 static 关键字支持后期静态绑定(bind)。因此,在您的类中,使用以下方式引用变量:

static::$var

并且“static”将在运行时解析为子类,因此每个子类都会有一个单独的静态变量。

关于抽象父类中的 PHP 静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5513484/

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