class Father{ public static function getStatic(){ return new static(); } public static function getSelf(){ return new self(); } } trait GrandFather{ public static function getStatic(){ return new static(); } public static function getSelf(){ return new self(); } } class Son1{ use GrandFather; } class Son2 extends Father { } $o1 = Son1::getStatic(); $o2 = Son2::getStatic();
new static和new self的表现,self时是new父类自己,static是代表当前子类且在使用extend和trait时效果一样