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指向的是最终那个子类,也就是使用此方法的类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值