PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】


Posted in PHP onApril 14, 2020

本文实例讲述了PHP 范围解析操作符(::)用法。分享给大家供大家参考,具体如下:

范围解析操作符 (::)

范围解析操作符(也可称作 Paamayim Nekudotayim)或者更简单地说是一对冒号,可以用于访问静态成员,类常量,还可以用于覆盖类中的属性和方法。

当在类定义之外引用到这些项目时,要使用类名。

自 PHP 5.3.0 起,可以通过变量来引用类,该变量的值不能是关键字(如 self,parent 和 static)。

把 Paamayim Nekudotayim 选作双冒号操作符的名字似乎有些奇怪。然而,这是 Zend 开发小组在写 Zend Engine 0.5(被用于 PHP 3 中)时所作出的决定。事实上这个词在希伯莱文就是双冒号的意思。

在类的外部使用  ::

self,parent 和 static 这三个特殊的关键字是用于在类定义的内部对其属性或方法进行访问的。

<?php
class MyClass {
  const CONST_VALUE = 'A constant value';
}

$classname = 'MyClass';
echo $classname::CONST_VALUE; // 自 PHP 5.3.0 起

echo MyClass::CONST_VALUE;

在类定义的内部使用 ::

当一个子类覆盖其父类中的方法时,PHP 不会调用父类中已被覆盖的方法。是否调用父类的方法取决于子类。这种机制也作用于构造函数和析构函数,重载以及魔术方法。

<?php
class OtherClass extends MyClass
{
  public static $my_static = 'static var';

  public static function doubleColon() {
    echo parent::CONST_VALUE . "\n";
    echo self::$my_static . "\n";
  }
}

$classname = 'OtherClass';
echo $classname::doubleColon(); // 自 PHP 5.3.0 起

OtherClass::doubleColon();

调用父类的方法

<?php
class MyClass
{
  protected function myFunc() {
    echo "MyClass::myFunc()\n";
  }
}

class OtherClass extends MyClass
{
  // 覆盖了父类的定义
  public function myFunc()
  {
    // 但还是可以调用父类中被覆盖的方法
    parent::myFunc();
    echo "OtherClass::myFunc()\n";
  }
}

$class = new OtherClass();
$class->myFunc();

运行结果:

MyClass::myFunc()
OtherClass::myFunc()

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

PHP 相关文章推荐
php抓取页面与代码解析 推荐
Jul 23 PHP
关于php内存不够用的快速解决方法
Oct 26 PHP
php查找指定目录下指定大小文件的方法
Nov 28 PHP
PHP使用适合阅读的格式显示文件大小的方法
Mar 05 PHP
Discuz!X中SESSION机制实例详解
Sep 23 PHP
调用WordPress函数统计文章访问量及PHP原生计数器的实现
Mar 21 PHP
深入理解PHP原理之执行周期分析
Jun 01 PHP
php 数组字符串搜索array_search技巧
Jul 05 PHP
php操纵mysqli数据库的实现方法
Sep 18 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
Jul 22 PHP
PHP设计模式之模板方法模式定义与用法详解
Apr 02 PHP
PHP防止sql注入小技巧之sql预处理原理与实现方法分析
Dec 13 PHP
PHP 自动加载类原理与用法实例分析
Apr 14 #PHP
php操作redis常见方法示例【key与value操作】
Apr 14 #PHP
PHPExcel实现的读取多工作表操作示例
Apr 14 #PHP
ThinkPHP 框架实现的读取excel导入数据库操作示例
Apr 14 #PHP
PHP 面向对象程序设计之类属性与类常量实现方法分析
Apr 13 #PHP
PHP 对象接口简单实现方法示例
Apr 13 #PHP
php使用goto实现自动重启swoole、reactphp、workerman服务的代码
Apr 13 #PHP
You might like
如何使用PHP往windows中添加用户
2006/12/06 PHP
php获取表单中多个同名input元素的值
2014/03/20 PHP
PHP提交表单失败后如何保留已经填写的信息
2014/06/20 PHP
PHP基于Redis消息队列实现发布微博的方法
2017/05/03 PHP
基于swoole实现多人聊天室
2018/06/14 PHP
Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作示例
2019/10/11 PHP
兼容多浏览器的iframe自适应高度(ie8 、谷歌浏览器4.0和 firefox3.5.3)
2009/11/04 Javascript
js播放wav文件(源码)
2013/04/22 Javascript
JS 两个字符串时间的天数差计算
2013/08/25 Javascript
JS预览图像将本地图片显示到浏览器上
2013/08/25 Javascript
js和html5实现手机端刮刮卡抽奖效果完美兼容android/IOS
2013/11/18 Javascript
用js的document.write输出的广告无阻塞加载的方法
2014/06/05 Javascript
JS设置下拉列表框当前所选值的方法
2015/12/22 Javascript
简单掌握JavaScript中const声明常量与变量的用法
2016/05/21 Javascript
JavaScript的Vue.js库入门学习教程
2016/05/23 Javascript
基于slideout.js实现移动端侧边栏滑动特效
2016/11/28 Javascript
微信小程序 picker-view 组件详解及简单实例
2017/01/10 Javascript
NodeJS实现不可逆加密与密码密文保存的方法
2018/03/16 NodeJs
解决vue 项目引入字体图标报错、不显示等问题
2018/09/01 Javascript
nodejs实现范围请求的实现代码
2018/10/12 NodeJs
微信小程序图片左右摆动效果详解
2019/07/13 Javascript
纯异步nodejs文件夹(目录)复制功能
2019/09/03 NodeJs
vue vant Area组件使用详解
2019/12/09 Javascript
js禁止查看源文件屏蔽Ctrl+u/s、F12、右键等兼容IE火狐chrome
2020/10/01 Javascript
Python处理RSS、ATOM模块FEEDPARSER介绍
2015/02/18 Python
python在windows下创建隐藏窗口子进程的方法
2015/06/04 Python
Python之pandas读写文件乱码的解决方法
2018/04/20 Python
OpenCV+Python--RGB转HSI的实现
2019/11/27 Python
html5开发三八女王节表白神器
2018/03/07 HTML / CSS
实习心得体会
2014/01/02 职场文书
英语商务邀请函范文
2014/01/16 职场文书
爱护草坪标语
2014/06/24 职场文书
学雷锋标兵事迹材料
2014/08/18 职场文书
开展警示教育活动总结
2015/05/09 职场文书
三好学生主要事迹怎么写
2015/11/03 职场文书
2019年度行政文员工作计划范本!
2019/07/04 职场文书