1 //传统模式 --这段代码能很好工作,但大量的重复代码很烦人,不想为每个DomainObject子类都创建这段相同代码吧?
 2 /*
 3
 4 abstract class DomainObject{}
 5
 6 class User extends DomainObject
 7 {
 8     public function __construct()
 9     {
10         echo __METHOD__;
11     }
12
13     public static function create()
14     {
15         return new self();
16     }
17
18 }
19 class Document extends DomainObject
20 {
21     public function __construct()
22     {
23         echo __METHOD__;
24     }
25
26     public static function create()
27     {
28         return new self();
29     }
30
31 }
32 User::create();
33 Document::create();
34 */
35
36 //能否这么干? 实例化最初调用者,谁调用实例化谁。但是这里self是指向的抽象类DomainObject
37 //fatal error: Cannot instantiate abstract class DomainObject 无法实例化抽象方法
38 /*
39 abstract class DomainObject
40 {
41     public static function create()
42     {
43         return new self();
44     }
45 }
46
47 class User extends DomainObject{}
48 class Document extends DomainObject{}
49 User::create();
50 */
51
52 //5.3后 可以使用static关键字,延迟静态绑定,通俗的就是,static 指向的是最初调用者
53 abstract class DomainObject
54 {
55     public static function create()
56     {
57         return new static();
58     }
59 }
60 class User extends DomainObject
61 {
62     public function __construct()
63     {
64         echo __METHOD__;
65     }
66
67 }
68 class Document extends DomainObject
69 {
70 public function __construct()
71     {
72         echo __METHOD__;
73     }
74 }
75 User::create(); //User::__construct
76 Document::create();  //Document::__construct

/***********static 关键字不仅仅可以用于实例化,和self和parent一样,static还可以作为静态方法调用标识符**************/

 1 abstract class DomainObject
 2 {
 3     private $group;
 4     public function __construct()
 5     {
 6         //$this->group = self::getGroup();
 7         $this->group = static::getGroup();
 8     }
 9
10     public static function create()
11     {
12         return new static();
13     }
14
15     static function getGroup()
16     {
17         return 'default';
18     }
19 }
20
21 class User extends DomainObject{}
22 class Document extends DomainObject
23 {
24     static function getGroup()
25     {
26         return 'document';
27     }
28 }
29 class SpreadSheet extends Document{}
30
31 print_r(User::create());         //     [group:DomainObject:private] => default
32 print_r(Document::create());     //     [group:DomainObject:private] => document
33 print_r(SpreadSheet::create());  //     [group:DomainObject:private] => document

php5.3 延迟静态绑定 static关键字相关推荐

  1. php延迟静态绑定,延迟静态绑定——static

    起因 乍听之下这名词很新鲜,各位听众继续往下走就知道其实你们是见过的.最近在看<PHP面向对象实践与设计>中讲到了延迟静态绑定static 的用法,特此来和大家分享,应该是比较简单的内容吧 ...

  2. php的延迟绑定,PHP延迟静态绑定使用方法实例解析

    这篇文章主要介绍了PHP延迟静态绑定使用方法实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 PHP的继承模型中有一个存在已久的问题,那就是在 ...

  3. PHP5 $this self parent static的区别

    PHP5 是一具备了大部分面向对象语言的特性的语言,比PHP4 有了很多的面向对象的特性,但是有部分概念也比较绕人,所以今天拿出来说说,说 的不好,请高手见谅. (阅读本文,需要了解PHP5 的面向对 ...

  4. JAVA知识基础(四):深入理解static关键字

    1.static存在的主要意义 static的主要意义是在于创建独立于具体对象的域变量或者方法.以致于即使没有创建对象,也能使用属性和调用方法! static关键字还有一个比较关键的作用就是 用来形成 ...

  5. 深入理解static关键字

    文章目录 1.static存在的主要意义 2.static的独特之处 3.static应用场景 4.静态变量和实例变量的概念 5.静态变量和实例变量区别[重点常用] 6.访问静态变量和实例变量的两种方 ...

  6. static在php中,php中static关键字在类中的使用

    static关键字用来修饰属性.方法,称这些属性.方法为静态属性.静态方法. static关键字声明一个属性或方法是和类相关的,而不是和类的某个特定的实例相关,因此,这类属性或方法也称为"类 ...

  7. Java常见面试题—”static”关键字有什么用?

    static作用: 1.static修饰方法 static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对 ...

  8. 【职坐标】java面向对象前言——static关键字

    Java面向对象前言 -- static关键字详解 一.      Static关键字的概念 static为"全局"或者"静态"的意思,用来修饰成员变量(类的属 ...

  9. php 浅谈static 关键字

    static  关键字定义静态方法和属性, 也可用于定义静态变量以及后期静态绑定 定义静态变量时 <?php function Test() { $aa= 0; echo $aa; $aa++; ...

最新文章

  1. docker本地私有仓库搭建
  2. 用命令行在控制台里玩斗地主,试过没?
  3. 流式细胞凋亡检测实验常见问题解析
  4. oracle linux 双机,oracleforlinux双机热备实战完全手册
  5. 【STC15库函数上手笔记】9、硬件SPI
  6. MongoDB 常用运算符
  7. Linux中点号,星号,加号,问号实战
  8. Extjs中renderer:function函数用法
  9. SolrJ 查询数据
  10. WPS表格填充技巧大全
  11. java webmldn,MLDN李兴华JAVA WEB视频教程(30集)_源雷技术空间
  12. 小胖儿 闲聊 百度有啊
  13. android刷机包基带,手机刷机有必要刷底包基带吗?刷安卓机中基带/底包/固件详解...
  14. ArcGis-制图(简单点、线、面符号的制作、保存)
  15. 计算机主机电源键,按电脑主机机箱电源键后,却没有任何反应疑难问题
  16. opta球员大数据预测胜负_数据分析视角下的世界杯冠军预测
  17. 固态硬盘和机械硬盘的区别
  18. windows启动管理器_如何在Windows 10中打开任务管理器,方法众多,值得收藏
  19. 微盛·企微管家杨明:未来企业微信生态能诞生中国的Salesforce
  20. 三层神经网络实现分类器

热门文章

  1. proxy_pool开源项目攻克学习
  2. java 集合迭代器_Java中的集合迭代器
  3. python转cpp_python转c工具
  4. oracle Blob保存方式,关于文件保存到Oracle中BLOB字段的方法及例子
  5. json符号解释大全_牛年汪姓男孩高端大气的名字大全
  6. 计算机基础ABCDEF,计算机应用基础_在线作业ABCDEF.docx
  7. java 外螺旋矩阵_螺旋矩阵的java实现
  8. Eclipse 答疑:Eclipse 如何设置 Java 代码自动提示和自动补全?
  9. mariadb mysql 5.6_MySQL / MariaDB 5.5 升级到 MySQL 5.6
  10. php井字游戏代码_PHP初级笔试题:Tic-Tac-Toe(n阶井字棋)判断胜负