//传统模式 --这段代码能很好工作,但大量的重复代码很烦人,不想为每个DomainObject子类都创建这段相同代码吧?
/* abstract class DomainObject{} class User extends DomainObject
{
public function __construct()
{
echo __METHOD__;
} public static function create()
{
return new self();
} }
class Document extends DomainObject
{
public function __construct()
{
echo __METHOD__;
} public static function create()
{
return new self();
} }
User::create();
Document::create();
*/ //能否这么干? 实例化最初调用者,谁调用实例化谁。但是这里self是指向的抽象类DomainObject
//fatal error: Cannot instantiate abstract class DomainObject 无法实例化抽象方法
/*
abstract class DomainObject
{
public static function create()
{
return new self();
}
} class User extends DomainObject{}
class Document extends DomainObject{}
User::create();
*/ //5.3后 可以使用static关键字,延迟静态绑定,通俗的就是,static 指向的是最初调用者
abstract class DomainObject
{
public static function create()
{
return new static();
}
}
class User extends DomainObject
{
public function __construct()
{
echo __METHOD__;
} }
class Document extends DomainObject
{
public function __construct()
{
echo __METHOD__;
}
}
User::create(); //User::__construct
Document::create(); //Document::__construct

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

 abstract class DomainObject
{
private $group;
public function __construct()
{
//$this->group = self::getGroup();
$this->group = static::getGroup();
} public static function create()
{
return new static();
} static function getGroup()
{
return 'default';
}
} class User extends DomainObject{}
class Document extends DomainObject
{
static function getGroup()
{
return 'document';
}
}
class SpreadSheet extends Document{} print_r(User::create()); // [group:DomainObject:private] => default
print_r(Document::create()); // [group:DomainObject:private] => document
print_r(SpreadSheet::create()); // [group:DomainObject:private] => document

php5.3 延迟静态绑定 static关键字的更多相关文章

  1. PHP延迟静态绑定 static关键字

    示例代码1 abstract class Parent { } class Man extends Parent { public static function create(){ return n ...

  2. PHP延迟静态绑定:static关键字

    PHP5.3中引入了延迟静态绑定的概念.该特性最明显的标志就是新关键字static.static类似于self,但它指的是被调用的类而不是包含类.在本例中,它的意思是调用Document::creat ...

  3. php static延迟静态绑定

    如果你是一个懒惰的程序员,你看到以下代码可能会恼火 abstract class U{ } class u1 extends U{ public static function create(){ r ...

  4. PHP "延迟静态绑定" 功能,static

    从这个名字的定义提取出两个关键点,第一点静态,也就是说这个功能只适用于静态属性或静态方法.第二点延迟绑定,这个根据下面代码就可以很好的理解 看一下这个例子: class A{ static $name ...

  5. 父类方法返回子类实例:PHP延迟静态绑定

    案例分析 先前的PHP项目中,看到类似于以下的一段代码: <?php class DBHandler { public function get() { } } class MySQLHandl ...

  6. PHP延迟静态绑定(本文属于转发)

    这段时间看项目后台的PHP代码,看到了类似于以下的一段代码,我把它抽出来: <?php class DBHandler { function get() {} } class MySQLHand ...

  7. php中static关键字的理解

    函数内的static变量 static静态变量的理解 静态变量 类型说明符是static. 静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在 静态存储区内分配存储单元),该区域中的数据在整 ...

  8. 深入理解final和static关键字

    深入理解final和static关键字 参考:http://blog.csdn.net/qq1028951741/article/details/53418852 final关键字 final关键字可 ...

  9. PHP的final关键字、static关键字、const关键字

    在PHP5中新增加了final关键字,它可以加载类或类中方法前.但不能使用final标识成员属性,虽然final有常量的意思,但在php中定义常量是使用define()函数来完成的. final关键字 ...

随机推荐

  1. freePBX汉化方法记录——备忘

    FreePBX汉化[root@bgcc69:/var/www/html/admin/i18n/zh_CN/LC_MESSAGES]$pwd/var/www/html/admin/i18n/zh_CN/ ...

  2. SQL的三种连接方式内连接、左连接、外连接

    1.内连接 select * from table_a x inner join table_b y on x.a_id = y.b_id 返回两个表关键字x.a_id = y.b_id的交集数据集 ...

  3. Oracle创建数据库链接

    **********创建数据库链接******************create public database link link_gzzl connect to system identifie ...

  4. 那些你希望N年前就掌握的命令

    这篇文章转载自黑客志,短短的一篇文章我找到了3个对我非常有用的技巧,在信息爆炸的今天,简直就跟捡宝似的,希望这些命令对你也有帮助. 有人在Reddit上发帖询问:有没有哪条命令是你希望自己在几年前就掌 ...

  5. JavaScript语句和异常

    知识内容: 1.条件语句(分支语句) 2.循环语句 3.with语句 4.异常处理 5.本节练习 参考资料:<JavaScript高级程序设计> 1.条件语句 JavaScript中的条件 ...

  6. 折腾了好久,thinkphp5打开提示加载failed to open stream: No such file or directory in think start.php

    GIT上下载的THINKPHP5记得先 composer update 我就是没update ,折腾了1个小时,才想起来这个事 thinkphp5默认首页打开空白 打开报错提示  提示thinkphp ...

  7. 尝试了一些时间,最简单的apache上设置用IP访问一个虚拟目录

    就是其实新建一个 多域名访问的设置 <VirtualHost *:80> DocumentRoot /var/www/ ServerName IP</VirtualHost> ...

  8. Sqlserver查询数据库文件大小和剩余空间

    在MS Sql Server中可以能过以下的方法查询出磁盘空间的使用情况及各数据库数据文件及日志文件的大小及使用利用率: 1.查询各个磁盘分区的剩余空间:Exec master.dbo.xp_fixe ...

  9. leetcode342

    public class Solution { public bool IsPowerOfFour(int num) { ) && ((num & (num - )) == ) ...

  10. fb bin_debug下的swf不见了

    fb清理了所选的项目,如果代码有错误,会自动删除bin_debug目录下的swf.这种情况,构建项目是无法自动生成swf的,只有将代码报错的地方修改正错了.选构建项目才会在bin_debug目录下生成 ...