在PHP面向对象编程中,我们经常使用self和static这两个关键字,但很多人对它们的理解停留在表面。特别是当它们分别用于静态调用和对象实例化时,行为差异更是让人困惑。最近在写一个PHP项目,就此来分享一下self和static的区别。
先来看一个简单但极具代表性的例子:
class A {
public static function getSelf() {
return new self();
}
public static function getStatic() {
return new static();
}
}
class B extends A {}
echo get_class(B::getSelf()); // 输出:A
echo get_class(B::getStatic()); // 输出:B