php 延迟静态绑定: static关键字】的更多相关文章

示例代码1 abstract class Parent { } class Man extends Parent { public static function create(){ return new Man(); } } class Woman extends Parent { public static function create(){ return new Woman(); } } 示例代码有一个parent父类,还包含Man和Woman两个子类,并在该两个类中都包含创建本身的的静…
//传统模式 --这段代码能很好工作,但大量的重复代码很烦人,不想为每个DomainObject子类都创建这段相同代码吧? /* abstract class DomainObject{} class User extends DomainObject { public function __construct() { echo __METHOD__; } public static function create() { return new self(); } } class Documen…
PHP5.3中引入了延迟静态绑定的概念.该特性最明显的标志就是新关键字static.static类似于self,但它指的是被调用的类而不是包含类.在本例中,它的意思是调用Document::create()将生成一个新的Document对象,而不是试图实例化一个DomainObject对象. 因此,现在在静态上下文中使用继承关系. abstract class DomainObject{ public static function create(){ return new static();…
从这个名字的定义提取出两个关键点,第一点静态,也就是说这个功能只适用于静态属性或静态方法.第二点延迟绑定,这个根据下面代码就可以很好的理解 看一下这个例子: class A{ static $name = "Tom"; public function printName(){ echo self::$name."\n"; self::fun(); } static function fun(){ echo "A Class\n"; } } cla…
如果你是一个懒惰的程序员,你看到以下代码可能会恼火 abstract class U{ } class u1 extends U{ public static function create(){ return new u1(); } } class u2 extends U{ public static function create(){ return new u2(); } } 这段代码正常工作是没问题,但大量重复的代码会很烦人 我不想在每个子类中添加create方法,如果把create方…
案例分析 先前的PHP项目中,看到类似于以下的一段代码: <?php class DBHandler { public function get() { } } class MySQLHandler extends DBHandler { // 这里一个create public static function create() { echo "MySQL"; return new self(); } public function get() { echo "MySQ…
深入理解final和static关键字 参考:http://blog.csdn.net/qq1028951741/article/details/53418852 final关键字 final关键字可以应用于类.方法以及变量. final声明变量 final声明变量可以保证在构造器函数返回之前,这个变量的值已经被设置.详细可以看final声明的重排序规则.分为三种情况: final声明基本数据类型变量:该变量只能被赋值一次,赋值后值不再改变. final声明引用数据类型变量:final只保证这个…
这段时间看项目后台的PHP代码,看到了类似于以下的一段代码,我把它抽出来: <?php class DBHandler { function get() {} } class MySQLHandler extends DBHandler { // 这里一个create public static function create() { echo "MySQL"; return new self(); } public function get() { echo "MyS…
函数内的static变量 static静态变量的理解 静态变量 类型说明符是static. 静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在 静态存储区内分配存储单元),该区域中的数据在整个程序的运行期间一直占用这些存储空间(在程序整个运行期间都不释放),也可以认为是其内存地址不变,直 到整个程序运行结束(相反,而auto自动变量,即动态局部变量,属于动态存储类别,占动态存储空间,函数调用结束后即释放).静态变量虽在程序的整个执行过程中始终存在,但是在它作用域之外不能使用. 另外,属…
类可以自下往上调用父类方法,如果需要在父类中根据不同的子类,来调用子类的方法,那么就需要延迟静态绑定.延迟静态绑定用的是保留关键词static. 所谓延迟静态绑定,顾名思义,静态调用时::符号左侧的部分的的绑定是延迟,也就是说不再被解析为定义当前方法所在的类,而是在实际运行时计算的. <?php class People { public static function hungry(){ //static和调用他的类进行静态绑定,然后调用static所绑定的类的eat方法 static::ea…