这其实就是self
和static
的区别
结论: 使用static
即可。
如下
$model = new static();
这是继承common
的类
namespace App\Models;
class Order extends Common
{
//
}
以下根据不同的common
类修改,展示效果。
self实例
以下以laravel的模型继承来展示实例,common类的内容如下:
<?php
namespace App\Models;
class Common extends Outside
{
// 返回已经可以设置完成数据库的实例
public static function getIns($db){
$self = new self();
$self->setConnection($db);
return $self;
}
}
此时查询的语句是:
select * from "commons"
很明显, 不是我们想要的,我们想查询orders
表的数据。
static实例
以下以laravel的模型继承来展示实例,common类的内容如下:
<?php
namespace App\Models;
class Common extends Outside
{
// 返回已经可以设置完成数据库的实例
public static function getIns($db){
$self = new static();
$self->setConnection($db);
return $self;
}
}
此时查询的语句是:
select * from "orders"
此时就是查询orders
表的数据了。
结论
1.没有继承时候,你用self::class 和 static::class是一样的,都是获取当前类名。
2.如果用到了继承,并且这个方法在父类,self指向的是当前的类。static指向的是最终那个子类,也就是使用此方法的类。
网友评论