先看代码:
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,且难以发现