PHP后期静态绑定之self::限制实例分析


Posted in PHP onDecember 21, 2018

本文实例讲述了PHP后期静态绑定之self::限制。分享给大家供大家参考,具体如下:

在此我想讲一讲后期静态绑,我想讲self::static进行比较说明。

官方文档上是这样定义的:

“后期绑定”的意思是说,static:: 不再被解析为定义当前方法所在的类,而是在实际运行时计算的。也可以称之为”静态绑定”,因为它可以用于(但不限于)静态方法的调用。

在此我想用官方文档上的一个例子来说明self::限制:

self::实例

class A{
  public static function who(){
   echo __CLASS__;
  }
  public static function test(){
   self::who();
  }
}
class B extends A{
  public static function who(){
   echo __class__;
  }
}
$B=new B();
$B->test();`

输出结果为:

A

static实例:

class A{
  public static function who(){
    echo __class__;
  }
  public static function test(){
    static::who();
  }
}
class B extends A{
  public static function who(){
    echo __class__;
  }
}
$B=new B();
$B->test();

输出结果为:

B

注意,注意啦!这里用的是:static::,以前很少在PHP中见过这种写法吧?看到static::,不禁想起来:self:: parent::

在此我想把self:: static:: parent::进行一个比较:

  • self:: 通常指向类本身,也就是self是不指向任何已经实例化的对象,一般self使用来指向类中的静态变量(不可以指向非静态变量),但是可以访问类中其他静态方法与非静态方法。它是当前类的指针。
  • parent:: 是指向父类的指针,一般我们使用parent来调用父类的构造函数。但也可以访问父类的其他方法(不可以访问其他静态与非静态变量)。
  • static:: 通常用于后期静态绑定中。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
谈谈PHP语法(4)
Oct 09 PHP
PHP学习 运算符与运算符优先级
Jun 15 PHP
封装一个PDO数据库操作类代码
Sep 09 PHP
MySQL连接数超过限制的解决方法
Jul 17 PHP
Php中文件下载功能实现超详细流程分析
Jun 13 PHP
php常用的url处理函数总结
Nov 19 PHP
如何在HTML 中嵌入 PHP 代码
May 13 PHP
一个简单安全的PHP验证码类、PHP验证码
Sep 24 PHP
PHP的消息通信机制测试实例
Nov 10 PHP
浅谈php中fopen不能创建中文文件名文件的问题
Feb 06 PHP
php使用ftp实现文件上传与下载功能
Jul 21 PHP
php对象工厂类完整示例
Aug 09 PHP
PHP类与对象后期静态绑定操作实例详解
Dec 20 #PHP
PHP设计模式之模板方法模式实例浅析
Dec 20 #PHP
PHP设计模式之模板模式定义与用法详解
Dec 20 #PHP
PHP面向对象程序设计之接口的继承定义与用法详解
Dec 20 #PHP
PHP面向对象程序设计之多态性的应用示例
Dec 19 #PHP
PHP自定义错误处理的方法分析
Dec 19 #PHP
PHP异常类及异常处理操作实例详解
Dec 19 #PHP
You might like
留言板翻页的实现详解
2006/10/09 PHP
php session_start()关于Cannot send session cache limiter - headers already sent错误解决方法
2009/11/27 PHP
PHP中的生成XML文件的4种方法分享
2012/10/06 PHP
PHP检测移动设备类mobile detection使用实例
2014/04/14 PHP
采用thinkphp自带方法生成静态html文件详解
2014/06/13 PHP
PHP通过内置函数memory_get_usage()获取内存使用情况
2014/11/20 PHP
php实现按照权重随机排序数据的方法
2015/01/09 PHP
使用js正则控制input标签只允许输入的值
2013/07/29 Javascript
JavaScript获取flash对象与网上的有所不同
2014/04/21 Javascript
jQuery学习笔记之jQuery中的$
2015/01/19 Javascript
jQuery实现在textarea指定位置插入字符或表情的方法
2015/03/11 Javascript
理解javascript模块化
2016/03/28 Javascript
JavaScript程序中的流程控制语句用法总结
2016/05/23 Javascript
深入理解jquery自定义动画animate()
2016/05/24 Javascript
基于JS实现无缝滚动思路及代码分享
2016/06/07 Javascript
Vue.js render方法使用详解
2017/04/05 Javascript
基于node.js之调试器详解
2017/08/22 Javascript
Nodejs+angularjs结合multiparty实现多图片上传的示例代码
2017/09/29 NodeJs
JS实现小米轮播图
2020/09/21 Javascript
JS绘图Flot应用图形绘制异常解决方案
2020/10/16 Javascript
[01:18:35]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS BO3 第一场 1月29日
2021/03/11 DOTA
python实现批量获取指定文件夹下的所有文件的厂商信息
2014/09/28 Python
python实现文本去重且不打乱原本顺序
2016/01/26 Python
有关Python的22个编程技巧
2018/08/29 Python
Linux下Python安装完成后使用pip命令的详细教程
2018/11/22 Python
pandas.DataFrame的pivot()和unstack()实现行转列
2019/07/06 Python
Win10系统下安装labelme及json文件批量转化方法
2019/07/30 Python
树莓派升级python的具体步骤
2020/07/05 Python
捷克移动配件网上商店:ProMobily.cz
2019/03/15 全球购物
C语言中break与continue的区别
2012/07/12 面试题
傲盾软件面试题
2015/08/17 面试题
学习雷锋倡议书
2014/04/15 职场文书
合同协议书格式
2014/04/18 职场文书
2016年“我们的节日·端午节”活动总结
2016/04/01 职场文书
MySQL系列之六 用户与授权
2021/07/02 MySQL
Python实现日志实时监测的示例详解
2022/04/06 Python