PHP通过::访问类
在PHP中,通过双冒号::
(也称为作用域解析操作符或静态操作符)访问类,通常意味着以下几种情况之一:
访问静态成员:
双冒号用于访问类的静态属性或静态方法。静态成员是属于类本身的,而不是属于类的某个特定实例。因此,你不需要创建类的实例就可以访问这些成员。
class MyClass {
public static $myStaticProperty = 'I am static';
public static function myStaticMethod() {
echo 'This is a static method';
}
}
echo MyClass::$myStaticProperty; // 访问静态属性
MyClass::myStaticMethod(); // 调用静态方法
覆盖类中的方法和属性(在继承中):
当子类覆盖父类中的方法时,你可以使用双冒号来引用父类中的被覆盖方法或属性。这通常用于在子类中调用父类的被覆盖方法。
class ParentClass {
public function sayHello() {
echo 'Hello from ParentClass';
}
}
class ChildClass extends ParentClass {
public function sayHello() {
echo 'Hello from ChildClass';
ParentClass::sayHello(); // 调用父类的方法
}
}
$child = new ChildClass();
$child->sayHello();
访问命名空间和类的常量:
双冒号也用于访问定义在类或命名空间中的常量。
class MyClass {
const MY_CONSTANT = 'Some value';
}
echo MyClass::MY_CONSTANT; // 访问类常量
对于命名空间中的常量,如果常量没有定义在任何类中,你可以直接使用命名空间的名称(如果当前文件也在该命名空间中,则可能不需要完整路径):
namespace MyNamespace {
const MY_NAMESPACE_CONSTANT = 'Namespace value';
}
echo \MyNamespace\MY_NAMESPACE_CONSTANT; // 访问命名空间常量
-
注意,如果当前文件也在
MyNamespace
命名空间中,则可以直接使用MY_NAMESPACE_CONSTANT
而不需要前缀\MyNamespace\
。
晚期静态绑定(Late Static Binding, LSB):
在静态上下文中,当你想要引用被调用类(而不是定义当前方法的类)时,可以使用static
关键字(它实际上是self::
的一个特殊用法,但行为不同)。然而,这里提到它是因为它与双冒号的使用相关,并且是在处理静态方法时的一个高级特性。
class Base {
public static function who() {
echo __CLASS__;
}
public static function test() {
static::who(); // 晚期静态绑定
}
}
class Child extends Base {
public static function who() {
echo __CLASS__;
}
}
Child::test(); // 输出 Child
在这个例子中,static::who()
在Child
类中调用时,会解析为Child::who()
而不是Base::who()
,这就是晚期静态绑定的作用。
总的来说,双冒号::
在PHP中是一个强大的操作符,它允许你以灵活的方式访问类的静态成员、覆盖的方法、命名空间和类的常量,以及实现晚期静态绑定。
上一篇: .rds 文件数据结构和内容 查看方法
下一篇: Redis 的缓存问题
推荐阅读
-
PHP通过::访问类
-
通过 Vue 中的 v-bind 增强样式控制--(通过 v-bind 操作类和操作样式属性的详细说明,附示例和代码)
-
84 通过外网地址访问内网服务器的外网用户
-
C++ 类和对象初步介绍-4.类访问限定符和封装
-
限制特定 IP 地址访问页面的 PHP 代码示例
-
在线代码执行工具(支持PHP,Java,C++等语言)-访问 http://www.it1352.com/Onlinetools
-
Java 8新特性探究(十三)JavaFX 8新特性以及开发2048游戏-JavaFX历史## 跟java在服务器端和web端成绩相比,桌面一直是java的软肋,于是Sun公司在2008年推出JavaFX,弥补桌面软件的缺陷,请看下图JavaFX一路走过来的改进 从上图看出,一开始推出时候,开发者需使用一种名为JavaFX Script的静态的、声明式的编程语言来开发JavaFX应用程序。因为JavaFX Script将会被编译为Java bytecode,程序员可以使用Java代码代替。 JavaFX 2.0之后的版本摒弃了JavaFX Script语言,而作为一个Java API来使用。因此使用JavaFX平台实现的应用程序将直接通过标准Java代码来实现。 JavaFX 2.0 包含非常丰富的 UI 控件、图形和多媒体特性用于简化可视化应用的开发,WebView可直接在应用中嵌入网页;另外 2.0 版本允许使用 FXML 进行 UI 定义,这是一个脚本化基于 XML 的标识语言。 从JDK 7u6开始,JavaFx就与JDK捆绑在一起了,JavaFX团队称,下一个版本将是8.0,目前所有的工作都已经围绕8.0库进行。这是因为JavaFX将捆绑在Java 8中,因此该团队决定跳过几个版本号,迎头赶上Java 8。 ##JavaFx8的新特性 ## ###全新现代主题:Modena 新的Modena主题来替换原来的Caspian主题。不过在Application的start方法中,可以通过setUserAgentStylesheet(STYLESHEET_CASPIAN)来继续使用Caspian主题。 参考http://fxexperience.com/2013/03/modena-theme-update/ ###JavaFX 3D 在JavaFX8中提供了3D图像处理API,包括Shape3D (Box, Cylinder, MeshView, Sphere子类),SubScene, Material, PickResult, LightBase (AmbientLight 和PointLight子类),SceneAntialiasing等。Camera类也得到了更新。从JavaDoc中可以找到更多信息。 ###富文本 强化了富文本的支持 ###TreeTableView ###日期控件DatePicker 增加日期控件 ###用于 CSS 结构的公共 API
-
Docker:允许通过2375端口访问Remote API
-
使用自定义加密方法对前端JavaScript进行加密,然后通过后台PHP进行解密
-
PHP验证功能:验证码类