php - 为后期静态绑定(bind)复制函数

标签 php mysql class late-static-binding

我正在努力解决后期静态绑定(bind)问题,通过阅读几个堆栈溢出问题和手册,除了我不明白为什么,在我找到的所有示例(包括手册)中,我都在那里,直接呼应类名的方法在子类中重复。

我的理解是,从另一个类扩展而来的类会继承其父类的所有方法和属性。所以,为什么后期静态绑定(bind)的PHP手册中的who()方法是重复的。我意识到如果没有它,父类会被回显,但不明白为什么。

查看手册中的代码...

<?php
class A {
    public static function who() {
        echo __CLASS__;
    }
    public static function test() {
        static::who(); // Here comes Late Static Bindings
    }
}

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

B::test();
?>

为什么需要重写 who() 方法,我认为它必须完全相同?提前致谢。

最佳答案

后期静态绑定(bind)类似于虚方法调用,但它是静态的。

在类 A 中,方法测试调用 two()。 two() 必须显示“A”。 然而,因为这类似于虚拟方法,所以执行 B::two()

这是几乎相同的代码,但我相信更清楚发生了什么:

<?php
class A {
    public static function process() {
        echo "AAAA";
    }
    public static function test() {
        static::process(); // Here comes Late Static Bindings
    }
}

class B extends A {
    public static function process() {
        echo "BBBB";
    }
}

B::test();

它在执行时打印 BBBB

关于php - 为后期静态绑定(bind)复制函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31171278/

相关文章:

C++ 如何使用类和函数将我的代码转换为 OOP?

php - 比较 2 个数组并删除相似的值

PHP - push_to_array 函数

mysql - Laravel 连接两个表(包括 null)

MySQL:子句顺序

c++ - 相互递归类是否可能?

javascript - 想要将当前网址更改为上一页网址(第二个域)?

php - 如何使用 doxygen 从 sql 文件生成 ERD?

java - Spring JDBC - 配置构建路径警告错误显示

objective-c - IOS - 使用 #import 类的正确方法