PHP进阶4 后期静态绑定

本文通过具体示例详细介绍了PHP中的后期静态绑定概念及其应用场景,包括静态方法调用、非静态函数调用及对象实例化等方面,并以Laravel框架中的Model类为例说明其实际运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                     不积跬步无以至千里不积小流无以成江海


  • 后期静态绑定
class A
{
    public static function call()
    {
        echo "class A" . "<br>";
    }

    public static function test()
    {
        self::call();
        static::call();
    }
}

class B extends A
{
    public static function call()
    {
        echo "class B" . "<br>";
    }
}

B::test();  //  class A class B
  • static并不仅限于静态方法调用,同样适用于非静态函数调用
class A
{
    public function call()
    {
        echo "class A" . "<br>";
    }

    public function test()
    {
        self::call();
        static::call();
    }
}

class B extends A
{
    public function call()
    {
        echo "class B" . "<br>";
    }
}

$b = new B();

$b->test();//  class A class B
  • 后期静态绑定还可以用于对象实例化
class A
{
    public static function create()
    {
        $self = new self();
        $static = new static();
        return [$self, $static];
    }
}

class B extends A
{

}

$arr = B::create();

array_walk($arr, function ($value) {
    var_dump($value);
}); //  object(A)#1 (0) { } object(B)#2 (0) { }

foreach ($arr as $value) {
    var_dump($value);
}   //  object(A)#1 (0) { } object(B)#2 (0) { }
  • laravel中Model类大量使用了后期静态绑定,因为该类为抽象类,所以它的实现类在调用这些函数时,最终动态绑定的都是实现类    而非Model这个抽象类
public static function create(array $attributes = [])
{
    $model = new static($attributes);
    $model->save();
    return $model;
}

public static function firstOrCreate(array $attributes)
{
    if (!is_null($instance = static::where[$attributes])->first()) {
        return $instance;
    }
    return static::create($attributes);
}

未完待续,继续更新......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值