如果类的静态函数可以被扩展类覆盖,并且从类内部调用静态方法,则static::提供后期绑定是必须的。但是在类不能被扩展的情况下(例如,它是最终的),那么使用static::也是错误的吗?
另一种方式来问同样的问题,当调用静态方法时,使用static::或self::的经验法则应该是什么,或者使用static::有这么大的缺点,应该只在严格需要的时候使用它?
发布于 2021-07-29 19:38:09
在最终的类中,它们之间没有区别,所以请使用您想要的任何一个。
两个调用都将返回A。
<?php
class Dad {
static function getStatic() {
return new static;
}
static function getSelf() {
return new self;
}
}
trait Useless {
static function getStatic() {
return new static;
}
}
final class A extends Dad {
use Useless;
static function getSelf() {
return new self;
}
}
var_dump(A::getStatic()::class);
var_dump(A::getSelf()::class);https://stackoverflow.com/questions/68577678
复制相似问题