当前位置: 移动技术网 > IT编程>开发语言>PHP > 【静态延迟加载】self关键字和static关键字的区别

【静态延迟加载】self关键字和static关键字的区别

2019年05月23日  | 移动技术网IT编程  | 我要评论

先来看下代码,从代码中发现问题、解决问题

//先实现一个手机工厂类
class phone{
    
    public static function setbrand(){
        echo "main phone";
    }

    public static function getbrand(){
        self::setbrand();
    }

}
//huawei 手机工厂
class huawei extends phone{
    public static function setbrand(){
        echo "huawei phone";
    }
}
//xiaomi 手机工厂
class xiaomi extends phone{
    public static function setbrand(){
        echo "xaiomi phone";
    }
}

huawei::getbrand(); // main phone
xiaomi::getbrand(); // main phone

上面是一个很经典很普通的工厂模式代码,我们期望的是输出各自手机的品牌名称,但是结果显示的是父类中的品牌名称。这说明我们调用的 self 关键代表的是代码中它所在的那个类 即 phone 这个类

//先实现一个手机工厂类
class phone{
    
    public static function setbrand(){
        echo "main phone";
    }

    public static function getbrand(){
        static::setbrand(); //将 self 改为 static
    }

}
//huawei 手机工厂
class huawei extends phone{
    public static function setbrand(){
        echo "huawei phone";
    }
}
//xiaomi 手机工厂
class xiaomi extends phone{
    public static function setbrand(){
        echo "xaiomi phone";
    }
}

huawei::getbrand(); // huawei phone
xiaomi::getbrand(); // xiaomi phone

这里我们只是将 self 关键字改为了 static 关键字,当值行代码时 这里的static代表的是当前正在执行的类 例如执行 

huawei::getbrand(); 时 static 代表的是 huawei
xiaomi::getbrand(); 时 static 代表的是 xiaomi

  这里总结一下 静态延迟加载的含义:把本来在定义阶段固定下来的表达式或变量,改在执行阶段再决定。



如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网