当前位置: 首页 > news >正文

PHP中类名加双冒号的作用

在 PHP 中,类名加双冒号(:: 是一种用于访问类的静态成员常量的语法。它也可以用来调用类的静态方法和访问 PHP 的类相关关键词(如 parentselfstatic)。以下是详细的解释和用法。


1. 用途概述

:: 被称为作用域解析操作符(Scope Resolution Operator),主要有以下作用:

1.1 访问静态属性

可以通过类名访问静态变量,而不需要实例化类。

class MyClass {public static $staticVar = "Hello, World!";
}// 访问静态属性
echo MyClass::$staticVar; // 输出: Hello, World!

1.2 调用静态方法

静态方法属于类本身,而不是类的实例。通过 类名::方法名 调用。

class MyClass {public static function staticMethod() {return "This is a static method.";}
}// 调用静态方法
echo MyClass::staticMethod(); // 输出: This is a static method.

1.3 访问类常量

类常量通过 const 定义,不能改变值,可以用 :: 访问。

class MyClass {const CONSTANT_VALUE = 42;
}// 访问常量
echo MyClass::CONSTANT_VALUE; // 输出: 42

1.4 特殊关键词的使用

self::

self:: 用于访问当前类的静态属性、方法或常量,而不考虑继承关系。

class ParentClass {const CONSTANT = "Parent Constant";public static function showConstant() {return self::CONSTANT; // 访问当前类的常量}
}class ChildClass extends ParentClass {const CONSTANT = "Child Constant";
}echo ChildClass::showConstant(); // 输出: Parent Constant

解释:即使 ChildClass 继承了 ParentClassself:: 始终指向定义 showConstant() 的类(即 ParentClass)。

parent::

parent:: 用于调用父类的方法或访问父类的属性。

class ParentClass {public static function parentMethod() {return "This is a parent method.";}
}class ChildClass extends ParentClass {public static function childMethod() {return parent::parentMethod(); // 调用父类的方法}
}echo ChildClass::childMethod(); // 输出: This is a parent method.
static::

static:: 是 PHP 的后期绑定机制,用于访问当前调用类(而不是定义类)的静态成员。

class ParentClass {public static function who() {return "ParentClass";}public static function test() {return static::who(); // 后期绑定}
}class ChildClass extends ParentClass {public static function who() {return "ChildClass";}
}echo ParentClass::test(); // 输出: ParentClass
echo ChildClass::test(); // 输出: ChildClass

解释static:: 根据实际调用的类来决定绑定的目标,而不是方法定义的类。


1.5 使用类名访问匿名类

匿名类的名字可以通过 类名::class 获取。

$classInstance = new class {public static function sayHello() {return "Hello from anonymous class!";}
};echo get_class($classInstance); // 输出: 类名(如 class@anonymous)

2. 小结

  • 静态成员访问类名::属性名类名::方法名
  • 访问常量类名::常量名
  • 特殊关键词
    • self:::指向当前类。
    • parent:::指向父类。
    • static:::后期绑定,用于动态调用。
  • 获取类名类名::class

:: 操作符主要用于访问类的静态上下文。如果需要访问对象的非静态成员,则需要使用 对象操作符 ->

http://www.lryc.cn/news/492629.html

相关文章:

  • 前端编程训练 异步编程篇 请求接口 vue与react中的异步
  • 【kafka03】消息队列与微服务之Kafka 读写数据
  • 【分布式系统】唯一性ID的实现
  • 哪里能找到好用的动物视频素材 优质网站推荐
  • SRAM芯片数据采集解决方案
  • 【贪心算法第七弹——674.最长连续递增序列(easy)】
  • [AI] 知之AI推出3D智能宠物:助力语言学习与口语提升的新选择
  • Android 14之HIDL转AIDL通信
  • 【R库包安装】R库包安装总结:conda、CRAN等
  • 学习PMC要不要去培训班?
  • 前端 用js封装部分数据结构
  • cocoscreator-doc-TS:目录
  • 理解Java集合的基本用法—Collection:List、Set 和 Queue,Map
  • IOC容器实现分层解耦
  • Flutter 共性元素动画
  • K8s内存溢出问题剖析:排查与解决方案
  • 乌班图单机(不访问外网)部署docker和服务的方法
  • 使用 pycharm 新建使用 conda 虚拟 python 环境的工程
  • Docker的save和export命令的区别,load和import的区别 笔记241124
  • 通俗理解人工智能、机器学习和深度学习的关系
  • 使用 pycharm 新建不使用 python 虚拟环境( venv、conda )的工程
  • 【大数据学习 | Spark-SQL】SparkSQL读写数据
  • AI赋能公共服务转型升级 | 第十届中国行业互联网大会暨腾讯云TVP行业大使三周年庆典公共服务专场圆满举办!
  • 关于按天切割Tomcat的catalina.out日志文件的配置
  • 【人工智能】深入解析GPT、BERT与Transformer模型|从原理到应用的完整教程
  • 彻底理解如何保证ElasticSearch和数据库数据一致性问题
  • 2024-2025热门留学趋势
  • 寻找视频特效素材的优质网站推荐 轻松提升作品魅力
  • 【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,2-36
  • 信息安全实验--密码学实验工具:CrypTool