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生成静态页面详解
Nov 19 PHP
深入掌握include_once与require_once的区别
Jun 17 PHP
基于PHP中的常用函数回顾
Jul 11 PHP
php把数据表导出为Excel表的最简单、最快的方法(不用插件)
May 10 PHP
PHP取余函数介绍MOD(x,y)与x%y
May 15 PHP
php生成图片验证码
Jun 09 PHP
PHP实现简单实用的分页类代码
Apr 08 PHP
PHP自定义序列化接口Serializable用法分析
Dec 29 PHP
php创建类并调用的实例方法
Sep 25 PHP
Thinkphp页面跳转设置跳转等待时间的操作
Oct 16 PHP
PHP设计模式之组合模式定义与应用示例
Feb 01 PHP
解决Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]
Apr 06 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
计数器详细设计
2006/10/09 PHP
Ajax PHP 边学边练 之三 数据库
2009/11/26 PHP
php对称加密算法示例
2014/05/07 PHP
在Laravel框架里实现发送邮件实例(邮箱验证)
2016/05/20 PHP
linux下php上传文件注意事项
2016/06/11 PHP
thinkPHP5框架实现多数据库连接,跨数据连接查询操作示例
2019/05/29 PHP
JavaScript中的console.assert()函数介绍
2014/12/29 Javascript
使用Promise解决多层异步调用的简单学习心得
2016/05/17 Javascript
AngularJS ng-bind 指令简单实现
2016/07/30 Javascript
jQuery实现的tab标签切换效果示例
2016/09/05 Javascript
Vue.js结合bootstrap实现分页控件
2017/03/10 Javascript
基于Vue2实现的仿手机QQ单页面应用功能(接入聊天机器人 )
2017/03/30 Javascript
js前端实现图片懒加载(lazyload)的两种方式
2017/04/24 Javascript
JS回调函数基本定义与用法实例分析
2017/05/24 Javascript
JavaScript编写的网页小游戏,很给力
2017/08/18 Javascript
简单的网页广告特效实例
2017/08/19 Javascript
node+koa实现数据mock接口的方法
2017/09/20 Javascript
Electron + vue 打包桌面操作流程详解
2019/06/24 Javascript
JavaScript 作用域scope简单汇总
2019/10/23 Javascript
Vue如何基于vue-i18n实现多国语言兼容
2020/07/17 Javascript
Python中使用urllib2防止302跳转的代码例子
2014/07/07 Python
python实现发送和获取手机短信验证码
2016/01/15 Python
通过Python爬虫代理IP快速增加博客阅读量
2016/12/14 Python
对numpy数据写入文件的方法讲解
2018/07/09 Python
8段用于数据清洗Python代码(小结)
2019/10/31 Python
Python Pandas 对列/行进行选择,增加,删除操作
2020/05/17 Python
基于python实现ROC曲线绘制广场解析
2020/06/28 Python
理货员的岗位职责
2013/11/23 职场文书
污水厂厂长岗位职责
2014/01/04 职场文书
一份没有按时交货失信于客户的检讨书
2014/09/19 职场文书
领导班子个人对照检查材料(群众路线)
2014/09/26 职场文书
未中标通知书
2015/04/17 职场文书
参观监狱警示教育心得体会
2016/01/15 职场文书
公文写作:工伤事故分析报告怎么写?
2019/11/05 职场文书
使用logback实现按自己的需求打印日志到自定义的文件里
2021/08/30 Java/Android
聊聊Python String型列表求最值的问题
2022/01/18 Python