QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

切换风格 注册 找回密码

php开发-PHP教程网


发表于 2019-5-22 14:00:32 | 显示全部楼层 |阅读模式
先来看下代码,从代码中发现问题、解决问题
  1. //先实现一个手机工厂类
  2. class Phone{
  3.    
  4.     public static function setBrand(){
  5.         echo "Main Phone";
  6.     }

  7.     public static function getBrand(){
  8.         self::setBrand();
  9.     }

  10. }
  11. //huawei 手机工厂
  12. class HuaWei extends Phone{
  13.     public static function setBrand(){
  14.         echo "HuaWei Phone";
  15.     }
  16. }
  17. //xiaomi 手机工厂
  18. class XiaoMi extends Phone{
  19.     public static function setBrand(){
  20.         echo "XaioMi Phone";
  21.     }
  22. }

  23. HuaWei::getBrand(); // Main Phone
  24. XiaoMi::getBrand(); // Main Phone
复制代码
上面是一个很经典很普通的工厂模式代码,我们期望的是输出各自手机的品牌名称,但是结果显示的是父类中的品牌名称。这说明我们调用的 self 关键代表的是代码中它所在的那个类 即 Phone 这个类
  1. //先实现一个手机工厂类
  2. class Phone{
  3.    
  4.     public static function setBrand(){
  5.         echo "Main Phone";
  6.     }

  7.     public static function getBrand(){
  8.         static::setBrand(); //将 self 改为 static
  9.     }

  10. }
  11. //huawei 手机工厂
  12. class HuaWei extends Phone{
  13.     public static function setBrand(){
  14.         echo "HuaWei Phone";
  15.     }
  16. }
  17. //xiaomi 手机工厂
  18. class XiaoMi extends Phone{
  19.     public static function setBrand(){
  20.         echo "XaioMi Phone";
  21.     }
  22. }

  23. HuaWei::getBrand(); // HuaWei Phone
  24. XiaoMi::getBrand(); // XiaoMi Phone
复制代码
这里我们只是将 self 关键字改为了 static 关键字,当值行代码时 这里的static代表的是当前正在执行的类 例如执行
HuaWei::getBrand(); 时 static 代表的是 HuaWeiXiaoMi::getBrand(); 时 static 代表的是 XiaoMi
  这里总结一下 静态延迟加载的含义:把本来在定义阶段固定下来的表达式或变量,改在执行阶段再决定。

发表于 2019-5-22 14:01:24 | 显示全部楼层
1v1飘过
发表于 2019-5-22 22:11:15 | 显示全部楼层
路过的帮顶

新浪微博达人勋

发表于 2019-5-23 23:58:22 | 显示全部楼层
好,很好,非常好!
发表于 2019-5-25 07:29:15 | 显示全部楼层
众里寻他千百度,蓦然回首在这里!
发表于 2019-5-29 07:54:43 | 显示全部楼层
LZ帖子不给力,勉强给回复下吧
发表于 2019-6-1 04:09:52 | 显示全部楼层
前排,哇咔咔
发表于 2019-6-1 18:01:16 | 显示全部楼层
求沙发
发表于 2019-6-2 00:19:58 | 显示全部楼层
呵呵。。。
发表于 2019-6-2 17:05:27 | 显示全部楼层
打酱油的人拉,回复下赚取积分
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆



Archiver|  

662p开源网. Powered by Niuzen

© 2001-2014 Niuzen Inc.

返回顶部