這其實就是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指向的是最終那個子類,也就是使用此方法的類。