PHP 可以使用 static::replace self::吗?

标签 php static-methods static-members

我对这件事有点困惑。我正在设计一个 ORM 类,它试图在 ruby​​ on rails 中表现得与 ActiveRecord 非常相似,但这不是重点。

我想说的是,我的类广泛使用静态属性继承,特别是用于数据库和表处理。我的问题是,我应该使用 self::吗?

最佳答案

您必须问自己:“我是否使用适当的方法来解决问题?”

self::static:: 做两个不同的事情。例如 self::__CLASS__ 是对当前类的引用,因此在特定范围内定义它不足以满足转发静态调用的需要。

继承会发生什么?

class A {
    public static function className(){
        echo __CLASS__;
    }

    public static function test(){
        self::className();
    }
}

class B extends A{
    public static function className(){
        echo __CLASS__;
    }
}

B::test();

这将打印出来

A

另一方面 static:: 它具有预期的行为

class A {
    public static function className(){
        echo __CLASS__;
    }

    public static function test(){
        static::className();
    }
}

class B extends A{
    public static function className(){
        echo __CLASS__;
    }
}


B::test();

这将打印出来

B

那叫 late static binding in PHP 5.3.0 .它解决了调用在运行时引用的类的限制。

考虑到这一点,我认为您现在可以充分了解并解决问题。如果你继承了几个静态成员并且需要访问父和子成员 self:: 是不够的。

关于PHP 可以使用 static::replace self::吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4718808/

相关文章:

php - 在 Laravel 5.4 中找不到类 'NumberFormatter'

c# - 垃圾回收如何处理对象引用?

java - 在类上调用静态方法?

java - 静态成员驻留在内存中的什么地方,是永久代吗?

java - 静态/类变量的值是如何传递的?

javascript - WordPress 和插件

php - 将路径数组转换为 UL 列表

php - Yii没有显示任何错误

c++ - 是否可以在 C++ 中的静态成员方法中调用非静态成员方法?

c++ - 如何在具有不同命名空间的派生 C++ 类中初始化模板静态成员