PHP静态延迟绑定

PHP 5.3.0中增加了一个static关键字来引用当前类,即实现了延迟静态绑定,同时PHP 5.3.0也实现get_called_class()函数用于查找当前被调用的类,而且允许使用变量作为类名调用静态属性或方法

(PHP 5 >= 5.3.0, PHP 7)

get_called_class — 后期静态绑定("Late Static Binding")类的名称

说明

string get_called_class ( void )

获取静态方法调用的类名。

返回值

返回类的名称,如果不是在类中调用则返回 FALSE。

范例

Example #1 get_called_class() 的使用

<?php

class foo {     static public function test() {         var_dump(get_called_class());     } }

class bar extends foo { }

foo::test(); bar::test();

?>

以上例程会输出:

string(3) "foo" string(3) "bar"

时间: 2024-10-11 16:48:06

PHP静态延迟绑定的相关文章

PHP静态延迟绑定简单示例

没怎么用过这个新特性,其实也不算新啦,试试吧,现在静态类的继承很方便了 <?php class A { protected static $def = '123456'; public static function test() { echo get_class(new static); } public static function test2() { echo static::$def; } } class B extends A { protected static $def = '4

数据持久化、单例、重载【添加对不可访问的成员的操作】、魔术方法、类常量、static关键字对self的补充【静态延迟绑定实现$this的效果】、参数类型约束【参数前加类名】、遍历【iterator接口】、快速排序

1.数据持久化过程[传输(例如表单提交或php交互mysql)和保存过程] 使用的是字符串形式的流数据. 数据流就是为了传输[按照序列的形式进行传输] [http://baike.baidu.com/link?url=0MtUQMhFzc_EwJc09rXZV8KlfOL4jis6XNbRfmGA3rQhDcGwOp8togLVQjXBV34M] 所以将其他类型数据转化为字符串的过程也是序列化的过程 [这个概念和图片.视频的流媒体的区别?] [注意点] 另外mysql中sql语句中的某些关键词为

PHP静态延迟绑定和普通静态效率简单对比

只是一个简单的小实验,对比了下 延迟绑定 和 非延迟的效率 延迟绑定主要就是使用 static 关键字来替代原来的 self ,但功能非常强大了 实验代码: class A { protected static $cc1 = array('a1', 'b', 'c', 'd'); protected static $cc2 = array('a2', 'b', 'c', 'd'); protected static $cc3 = array('a3', 'b', 'c', 'd'); prote

通过工厂模式来认识PHP的静态延迟绑定

通过简单的工厂模式来认识PHP的静态延迟绑定 <?php abstract class Demo {     public static $name = 'sallency';          //error     public static function selfInstance() {         //self是用来解析上下文         //此处的语境为调用定义它的类         //抽象类不可实例化所以会报错         return new self();   

PHP OPP 和模式 (2) - 静态变量、属性和方法及延迟绑定

PHP高级程序设计 学习笔记 2014.06.10 本文讨论static关键字,他可以用在变量.类和方法上. 1.静态变量 静态变量是只存在于函数作用域的变量,不过,在函数执行完成以后,这种变量的值不会丢失,也就是说,在下一次执行这个函数时,变量仍然会记得原来的值.要将某个变量定义为静态的,只需要在变量前加上static关键字即可. function testing() { static $a = 1; $a *= 2; echo $a."\n"; } testing(); testi

Java前期(静态)绑定和后期(动态)绑定

Java前期(静态)绑定和后期(动态)绑定 程序绑定的概念:绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来.对java来说,绑定分为静态绑定和动态绑定:或者叫做前期绑定和后期绑定. 静态绑定:在程序执行前方法已经被绑定(也就是说在编译过程中就已经知道这个方法到底是哪个类中的方法),此时由编译器或其它连接程序实现.例如:C.针对java简单的可以理解为程序编译期的绑定:这里特别说明一点,java当中的方法只有final,static,private和构造方法是前期绑定 动态绑定:后期绑

Scala学习之延迟绑定

1 package com.swust.example 2 3 object TraitDemo2 extends App{ 4 5 //抽象类 6 abstract class Writer { 7 def writeMessage(message: String) 8 } 9 /** 10 * 继承这个抽象类,并且用super调用了这个抽象方法 11 * scala要求将方法声明为abstract override 12 * override告诉scala要为基类的一个已知方法提供一个实现

PHP 延迟绑定

1 class product{ 2 public static function create(){ 3 return new static(); 4 } 5 } 6 7 class food extends product{ 8 9 } 10 11 var_dump(food::create()); 12 //food::out(); 以上代码输出:object(food)#1 (0) { } class product{ public static function create(){ r

scala学习手记34 - trait方法的延迟绑定

trait的方法的延迟绑定就是先混入的trait的方法会后调用.这一点从上一节的实例中也可以看出来. 下面再来看一个类似的例子: abstract class Writer { def write(message: String): String } trait UpperWriter extends Writer { abstract override def write(message: String): String = super.write(message.toUpperCase) }