PHP Static延迟静态绑定用法分析
本文实例讲述了PHP Static延迟静态绑定用法。分享给大家供大家参考,具体如下:
PHP5.3以后引入了延迟静态绑定static,它是为了解决什么问题呢?php的继承模型中有一个存在已久的问题,那就是在父类中引用扩展类的最终状态比较困难。来看一个例子。
class A { public static function echoClass(){ echo __CLASS__; } public static function test(){ self::echoClass(); } } class B extends A { public static function echoClass() { echo __CLASS__; } } B::test(); //输出A
在PHP5.3中加入了一个新特性:延迟静态绑定,就是把本来在定义阶段固定下来的表达式或变量,改在执行阶段才决定,比如当一个子类继承了父类的静态表达式的时候,它的值并不能被改变,有时不希望看到这种情况。
下面的例子解决了上面提出的问题:
class A { public static function echoClass(){ echo __CLASS__; } public static function test() { static::echoClass(); } } class B extends A { public static function echoClass(){ echo __CLASS__; } } B::test(); //输出B
第8行的static::echoClass();定义了一个静态延迟绑定方法,直到B调用test的时候才执行原本定义的时候执行的方法。
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php操作office文档技巧总结(包括word,excel,access,ppt)》、《php日期与时间用法总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
相关推荐
-
Java中的静态绑定和动态绑定详细介绍
一个Java程序的执行要经过编译和执行(解释)这两个步骤,同时Java又是面向对象的编程语言.当子类和父类存在同一个方法,子类重写了父类的方法,程序在运行时调用方法是调用父类的方法还是子类的重写方法呢,这应该是我们在初学Java时遇到的问题.这里首先我们将确定这种调用何种方法实现或者变量的操作叫做绑定. 在Java中存在两种绑定方式,一种为静态绑定,又称作早期绑定.另一种就是动态绑定,亦称为后期绑定. 区别对比 1.静态绑定发生在编译时期,动态绑定发生在运行时 2.使用private或stati
-
php5.3后静态绑定用法详解
本文实例讲述了php5.3后静态绑定用法.分享给大家供大家参考,具体如下: 手册原文: 自 PHP 5.3.0 起,PHP 增加了一个叫做后期静态绑定的功能,用于在继承范围内引用静态调用的类. 准确说,后期静态绑定工作原理是存储了在上一个"非转发调用"(non-forwarding call)的类名.当进行静态方法调用时,该类名即为明确指定的那个(通常在 :: 运算符左侧部分):当进行非静态方法调用时,即为该对象所属的类.所谓的"转发调用"(forwarding c
-
php延迟静态绑定实例分析
本文实例讲述了php延迟静态绑定的方法.分享给大家供大家参考.具体分析如下: php延迟静态绑定:指类的self,不是以定义时为准,而是以计算时的运行结果为准.先看一个实例 <?php header("content-type:text/html;charset=utf-8"); class Human{ public static function hei(){ echo "我是父类的hei()方法"; } public function say(){//如
-
windows下升级PHP到5.3.3的过程及注意事项
就升级了本地的开发环境,没有涉及到生产环境.其实从5.3.0升级到5.3.3的过程还算蛮简单的,就是修改自己的程序有点麻烦,遇到了个小问题就是升级后竟然自己的项目无法连接mysql了,原因就是数据库配置串的问题,将localhost换成了127.0.0.1就好了.以后我在也不会在用localhost了........ 正文 环境介绍:WAMP PHP版本 5.3.0 vc6 ,升级到 5.3.3 vc6 步骤 0.停止WAMP服务 复制解压的php5.3.3 到 E:\Wamp\bin\p
-
深入理解C++的动态绑定与静态绑定的应用详解
为了支持c++的多态性,才用了动态绑定和静态绑定.理解他们的区别有助于更好的理解多态性,以及在编程的过程中避免犯错误.需要理解四个名词:1.对象的静态类型:对象在声明时采用的类型.是在编译期确定的.2.对象的动态类型:目前所指对象的类型.是在运行期决定的.对象的动态类型可以更改,但是静态类型无法更改.关于对象的静态类型和动态类型,看一个示例: 复制代码 代码如下: class B{}class C : public B{}class D : public B{}D* pD = new D();/
-
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
-
简单谈谈php延迟静态绑定
使用场景 先来观察以下代码: abstract class base { //do sth } class aClass extends base{ public static function create(){ return new aClass(); } } class bClass extends base{ public static function create(){ return new bClass(); } } var_dump(aClass::create()); var_
-
PHP5.3以上版本安装ZendOptimizer扩展
现在很多PHP程序都需要ZendOptimizer环境,但是ZendOptimizer在PHP5.2之后已经被支持,那怎么办,Zend也不会这么做,原来PHP5.3开始ZendOptimizer正式改为Zend Guard Loader. Zend Guard Loader的发布,而且Zend Optimizer不会再更新,并且由于差异很大使用Zend Guard加密代码时将提示你是否使用php5.3,如果使用5.3那么代码就无法在php5.2上运行. Zend Guard Loader安装说明
-
PHP面向对象之后期静态绑定功能介绍
本文将对PHP后期静态绑定功能进行介绍,它主要用于解决在继承范围内引用静态调用的类. 首先来看下面这个例子: 复制代码 代码如下: class Person { public static function status() { self::getStatus(); } protected static function getStatus() { echo "Person is alive"; }
-
理解Java中的静态绑定和动态绑定
一个Java程序的执行要经过编译和执行(解释)这两个步骤,同时Java又是面向对象的编程语言.当子类和父类存在同一个方法,子类重写了父类的方法,程序在运行时调用方法是调用父类的方法还是子类的重写方法呢,这应该是我们在初学Java时遇到的问题.这里首先我们将确定这种调用何种方法实现或者变量的操作叫做绑定. 在Java中存在两种绑定方式,一种为静态绑定,又称作早期绑定.另一种就是动态绑定,亦称为后期绑定. 程序绑定的概念: 绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来.对java来说,
-
PHP5.3安装Zend Guard Loader图文教程
Zend Optimizer/3.3.3 解密加代码优化,提高PHP应用程序的执行速度,显著降低服务器的CPU负载. Zend Guard Loader/5.5.0/6.0 解密加代码优化,提高PHP应用程序的执行速度,显著降低服务器的CPU负载. PHP 5.3.X 开始 Zend Optimizer 正式被 Zend Guard Loader 取代了.安装方法有所不同,以下是安装 Zend Guard Loader的具体方法: 下载地址:ZendGuardLoader-php-5.3-Win
随机推荐
- asp.net mvc4中bootstrap datetimepicker控件的使用
- P3P 和 跨域 (cross-domain) cookie 访问(读取和设置)
- 原生JS实现移动端web轮播图详解(结合Tween算法造轮子)
- Linux中基本正则表达式
- 对JavaScript中this指针的新理解分享
- thinkPHP分组后模板无法加载问题解决方法
- 基于php在各种web服务器的运行模式详解
- Python每天必学之bytes字节
- Python判断变量是否已经定义的方法
- 浅析C# 基础语法的使用
- javascript入门之window对象【新手必看】
- 基于Python_脚本CGI、特点、应用、开发环境(详解)
- Nginx服务器中414错误和504错误的配置解决方法
- 修改SQL-SERVER数据库表结构的SQL命令附sql命令行修改数据库
- 使用BULK INSERT大批量导入数据 SQLSERVER
- Oracle排名函数(Rank)实例详解
- C语言中编写可变参数函数
- JavaScrip关于创建常量的知识点
- vue中路由参数传递可能会遇到的坑
- NumPy 如何生成多维数组的方法