php - 什么时候使用 self、parent、static 以及如何?

标签 php oop static

如果现在我对 ststic 有所了解的话,现在我意识到我什么都不懂。我很困惑,我很难理解,但我无法理解。有人可以解释这个程序何时使用 self、parent、static 以及如何使用 我所做的所有最小的改变都会改变结果,否则我无法理解发生了什么。 非常感谢..

代码来自http://docs.php.net/language.oop5.late-static-bindings

<?php
class A {
    public static function foo() {
        static::who();
    }

    public static function who() {
        echo __CLASS__."\n";
    }
}

class B extends A {
    public static function test() {
        A::foo();
        parent::foo();
        self::foo();
    }

    public static function who() {
        echo __CLASS__."\n";
    }
}
class C extends B {
    public static function who() {
        echo __CLASS__."\n";
    }
}

C::test();
?>

输出是:

A
C
C

最佳答案

您需要了解 Late Static Binding 的概念,它确定标识符何时绑定(bind)到代码/数据。您可以告诉 PHP 尽早绑定(bind)它 (self::) 或稍后绑定(bind)它 (static::)。

将示例精简为两个类,我们得到:

class A {
    public static function foo() {
        self::who(); // PHP binds this to A::who() right away
        static::who();  // PHP waits to resolve this (hence, late)!
    }

    public static function who() {
        echo __CLASS__."\n";
    }
}

class B extends A {
    public static function test() {
       self::foo();
    }

    public static function who() {
        echo __CLASS__."\n";
    }
}

B::test();

关于php - 什么时候使用 self、parent、static 以及如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10504129/

相关文章:

php - 如今,最好的 PHP 图像处理器库是什么?

php - 如何从类的函数内部访问全局变量

c++ - 我怎样才能避免菱形继承(钻石问题)?

c++ - 我应该使用静态数据成员吗? (C++)

c# - 静态、内部和公共(public)构造函数之间有什么区别?

php - AJAX请求返回 'undefined'

PhpStorm - 参数的 PHPDoc "any"类型

php - 在PHP中将调用类捕获到层次结构中

python - 为什么 Python 似乎将实例变量视为在对象之间共享?

c++ - 如何为每个派生类存储一个可以从基类访问的魔数(Magic Number)?