php中繼承父類的子類如何使用父類的方法實例化自己


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM