zoukankan      html  css  js  c++  java
  • 【静态延迟加载】self关键字和static关键字的区别

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

    //先实现一个手机工厂类
    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

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



  • 相关阅读:
    个人冲刺计划一周天详细
    软件小创意
    电梯调度小程序。
    敏捷开发一些百科。
    求二维数组的子数组中的最大值!
    求整数数组中子数组最大的和值!
    单元测试我们应该注意什么!
    分析一个文档(英语文章)中各个词出现的频率,并打印频率最高的前10个。
    有感而发
    冲刺一TD美景美图
  • 原文地址:https://www.cnblogs.com/itsuibi/p/10903998.html
Copyright © 2011-2022 走看看