php5.3 延迟静态绑定 static关键字
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关键字相关推荐
- php延迟静态绑定,延迟静态绑定——static
起因 乍听之下这名词很新鲜,各位听众继续往下走就知道其实你们是见过的.最近在看<PHP面向对象实践与设计>中讲到了延迟静态绑定static 的用法,特此来和大家分享,应该是比较简单的内容吧 ...
- php的延迟绑定,PHP延迟静态绑定使用方法实例解析
这篇文章主要介绍了PHP延迟静态绑定使用方法实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 PHP的继承模型中有一个存在已久的问题,那就是在 ...
- PHP5 $this self parent static的区别
PHP5 是一具备了大部分面向对象语言的特性的语言,比PHP4 有了很多的面向对象的特性,但是有部分概念也比较绕人,所以今天拿出来说说,说 的不好,请高手见谅. (阅读本文,需要了解PHP5 的面向对 ...
- JAVA知识基础(四):深入理解static关键字
1.static存在的主要意义 static的主要意义是在于创建独立于具体对象的域变量或者方法.以致于即使没有创建对象,也能使用属性和调用方法! static关键字还有一个比较关键的作用就是 用来形成 ...
- 深入理解static关键字
文章目录 1.static存在的主要意义 2.static的独特之处 3.static应用场景 4.静态变量和实例变量的概念 5.静态变量和实例变量区别[重点常用] 6.访问静态变量和实例变量的两种方 ...
- static在php中,php中static关键字在类中的使用
static关键字用来修饰属性.方法,称这些属性.方法为静态属性.静态方法. static关键字声明一个属性或方法是和类相关的,而不是和类的某个特定的实例相关,因此,这类属性或方法也称为"类 ...
- Java常见面试题—”static”关键字有什么用?
static作用: 1.static修饰方法 static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对 ...
- 【职坐标】java面向对象前言——static关键字
Java面向对象前言 -- static关键字详解 一. Static关键字的概念 static为"全局"或者"静态"的意思,用来修饰成员变量(类的属 ...
- php 浅谈static 关键字
static 关键字定义静态方法和属性, 也可用于定义静态变量以及后期静态绑定 定义静态变量时 <?php function Test() { $aa= 0; echo $aa; $aa++; ...
最新文章
- docker本地私有仓库搭建
- 用命令行在控制台里玩斗地主,试过没?
- 流式细胞凋亡检测实验常见问题解析
- oracle linux 双机,oracleforlinux双机热备实战完全手册
- 【STC15库函数上手笔记】9、硬件SPI
- MongoDB 常用运算符
- Linux中点号,星号,加号,问号实战
- Extjs中renderer:function函数用法
- SolrJ 查询数据
- WPS表格填充技巧大全
- java webmldn,MLDN李兴华JAVA WEB视频教程(30集)_源雷技术空间
- 小胖儿 闲聊 百度有啊
- android刷机包基带,手机刷机有必要刷底包基带吗?刷安卓机中基带/底包/固件详解...
- ArcGis-制图(简单点、线、面符号的制作、保存)
- 计算机主机电源键,按电脑主机机箱电源键后,却没有任何反应疑难问题
- opta球员大数据预测胜负_数据分析视角下的世界杯冠军预测
- 固态硬盘和机械硬盘的区别
- windows启动管理器_如何在Windows 10中打开任务管理器,方法众多,值得收藏
- 微盛·企微管家杨明:未来企业微信生态能诞生中国的Salesforce
- 三层神经网络实现分类器
热门文章
- proxy_pool开源项目攻克学习
- java 集合迭代器_Java中的集合迭代器
- python转cpp_python转c工具
- oracle Blob保存方式,关于文件保存到Oracle中BLOB字段的方法及例子
- json符号解释大全_牛年汪姓男孩高端大气的名字大全
- 计算机基础ABCDEF,计算机应用基础_在线作业ABCDEF.docx
- java 外螺旋矩阵_螺旋矩阵的java实现
- Eclipse 答疑:Eclipse 如何设置 Java 代码自动提示和自动补全?
- mariadb mysql 5.6_MySQL / MariaDB 5.5 升级到 MySQL 5.6
- php井字游戏代码_PHP初级笔试题:Tic-Tac-Toe(n阶井字棋)判断胜负