【问题标题】:Accessing properties from a class in an inherited static method in PHP在 PHP 中以继承的静态方法访问类的属性
【发布时间】:2017-05-17 14:08:37
【问题描述】:

我有许多 PHP 类继承了一个基类。这个基类提供了一个静态方法,我们称之为methodA(),它可以在每个类中被覆盖,但实际上不会被太多覆盖。每个类都有一个静态变量,我们称它为name,这是不同的,但methodA() 需要能够基于name 对每个类进行不同的操作。我是面向对象的 PHP 新手,所以我不确定如何最好地做到这一点。

在 Java 中,我会在基类上创建一个属性,然后在构造函数方法中定义它,然后我将通过 super() 调用该属性,但我不确定如何根据静态数据最好地做到这一点。我在正确的轨道上吗?实现这一目标的最佳方法是什么?

【问题讨论】:

  • 仅供参考:如果您的代码围绕 static 调用,则它不是 OOP。你所拥有的只是命名空间的全局变量(变量和函数)。
  • @AlexBlex 如果您将该评论作为示例的答案,我很乐意接受。

标签: php class static


【解决方案1】:

感谢@AlexBlex。

PHP 提供了一个名为 Late Static Bindings 的功能,它完全允许这种行为。

从 PHP 5.3.0 开始,PHP 实现了一种称为后期静态绑定的功能,该功能可用于在静态继承的上下文中引用被调用的类。

在问题中提供的示例中,执行此操作的方法如下:

class Base {
    public static function methodA() {
        return static::$name;
    }
}

class A extends Base {
    public static $name = "Apple";
}

class B extends Base {
    public static $name = "Box";
}

然后您可以使用预期结果调用该函数:

echo(A::methodA()); // "Apple"
echo(B::methodA()); // "Box"

此示例在 PHP 7 中运行。

【讨论】:

    猜你喜欢
    • 2022-01-24
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多