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 相关文章推荐
文件上传类
Oct 09 PHP
PHP5+UTF8多文件上传类
Oct 17 PHP
php 缩略图实现函数代码
Jun 23 PHP
PHP中文件缓存转内存缓存的方法
Dec 06 PHP
关于mysql字符集设置了character_set_client=binary 在gbk情况下会出现表描述是乱码的情况
Jan 06 PHP
使用php显示搜索引擎来的关键词
Feb 13 PHP
Laravel 5框架学习之表单
Apr 08 PHP
php正则preg_replace_callback函数用法实例
Jun 01 PHP
简单理解PHP的面向对象编程方式
May 17 PHP
详解Yaf框架PHPUnit集成测试方法
Dec 27 PHP
php+laravel 扫码二维码签到功能
May 15 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
利用PHP将图片转换成base64编码的实现方法
2016/09/13 PHP
php获取远程图片并下载保存到本地的方法分析
2016/10/08 PHP
解决laravel5.4下的group by报错的问题
2019/10/16 PHP
javascript当onmousedown、onmouseup、onclick同时应用于同一个标签节点Element
2010/01/05 Javascript
第一个JavaScript入门基础 document.write输出
2010/02/22 Javascript
10个基于jQuery或JavaScript的WYSIWYG 编辑器整理
2010/05/06 Javascript
使用jQuery操作Cookies的实现代码
2011/10/09 Javascript
前端开发过程中浏览器版本的两种判定方法
2013/10/30 Javascript
使用js检测浏览器是否支持html5中的video标签的方法
2014/03/12 Javascript
JS的encodeURI和java的URLDecoder.decode使用介绍
2014/05/08 Javascript
Nodejs实战心得之eventproxy模块控制并发
2015/10/27 NodeJs
Bootstrap模块dropdown实现下拉框响应
2016/05/22 Javascript
js判断radiobuttonlist的选中值显示/隐藏其它模块的实现方法
2016/08/25 Javascript
AngularJS bootstrap启动详解及实例代码
2016/09/14 Javascript
Vue.js第四天学习笔记
2016/12/02 Javascript
详谈js模块化规范
2017/07/07 Javascript
node.js博客项目开发手记
2018/03/16 Javascript
微信小程序实现即时通信聊天功能的实例代码
2018/08/17 Javascript
详解webpack自定义loader初探
2018/08/29 Javascript
Angular2中监听数据更新的方法
2018/08/31 Javascript
利用jquery和BootStrap实现动态滚动条效果
2018/12/03 jQuery
jquery实现购物车基本功能
2019/10/25 jQuery
JS面向对象之多选框实现
2020/01/17 Javascript
详解Python中open()函数指定文件打开方式的用法
2016/06/04 Python
python manage.py runserver流程解析
2019/11/08 Python
使用pyinstaller逆向.pyc文件
2019/12/20 Python
Python 使用xlwt模块将多行多列数据循环写入excel文档的操作
2020/11/10 Python
CSS3实现自定义Checkbox特效实例代码
2017/04/24 HTML / CSS
canvas实现烟花的示例代码
2020/01/16 HTML / CSS
Casadei卡萨蒂官网:意大利奢侈鞋履品牌
2017/10/28 全球购物
酒店秘书求职信范文
2014/02/17 职场文书
秋季运动会演讲稿
2014/09/16 职场文书
2014年大学生社会实践自我鉴定
2014/09/26 职场文书
2014年污水处理厂工作总结
2014/12/19 职场文书
Java的Object类的九种方法
2022/04/13 Java/Android
Elasticsearch 索引操作和增删改查
2022/04/19 Python