如果现在我对 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/