先看代码:
abstract class A
{
public static function model($classname = __CLASS__)
{
return new $classname;
}
}
class B extends A
{
}
B::model();这里会报一个fatal error:Cannot instantiate abstract class A
究其原因,是魔术常量__CLASS__值是该类名,且在运行前已经由编译器替换成了“A”,而A为抽象类所以报错
如果不是抽象类,后果会更严重,以为实例化的B,实际实例化的A,且难以发现
本文通过一个具体的PHP代码示例,展示了尝试实例化抽象类时可能遇到的问题,并深入解析了导致这一错误的原因。同时,文章还提醒开发者注意非抽象类中潜在的误用风险。
4101

被折叠的 条评论
为什么被折叠?



