范围解析操作符(::)

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

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

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

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

Example #1 在类的外部使用 :: 操作符

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

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

echo  MyClass :: CONST_VALUE ;
?>

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

Example #2 在类定义内部使用 ::

<?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 不会调用父类中已被覆盖的方法。是否调用父类的方法取决于子类。这种机制也作用于构造函数和析构函数,重载以及魔术方法。

Example #3 调用父类的方法

<?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 ();
?>

时间: 2024-10-01 03:26:40

范围解析操作符(::)的相关文章

访问控制,范围解析操作符,抽象类,对象接口

1.和"public"类似的访问修饰符分别有什么作用? PHP中有三种访问修饰符,分别是: public(公共的.默认)protected(受保护的) private(私有的) 用在继承关系的时候它们可以分别用在类的属性和方法上(类的属性和方法统称为类的成员),用来修饰类成员的访问权限. public(公共的.默认) 在PHP5中如果类没有指定成员的访问修饰符,默认就是public的访问权限. /* 以下两个方法声明访问权限效果相同 */ function say(){}; publi

PHP 范围解析操作符 (::)

范围解析操作符 (::) 范围解析操作符(也可称作 Paamayim Nekudotayim)或者更简单地说是一对冒号,可以用于访问静态成员,类常量,还可以用于覆盖类中的属性和方法. 当在类定义之外引用到这些项目时,要使用类名. 自 PHP 5.3.0 起,可以通过变量来引用类,该变量的值不能是关键字(如 self,parent 和 static). 把 Paamayim Nekudotayim 选作双冒号操作符的名字似乎有些奇怪.然而,这是 Zend 开发小组在写 Zend Engine 0.

PHP 类与对象 全解析( 一)

目录 PHP 类与对象 全解析( 一) PHP 类与对象 全解析( 二) PHP 类与对象 全解析(三 ) 1.类与对象 对象:实际存在该类事物中每个实物的个体.$a =new User(); 实例化后的$a引用:php的别名,两个不同的变量名字指向相同的内容 封装: 把对象的属性和方法组织在一个类(逻辑单元)里继承:以原有的类为基础,创建一个新类,从而代码复用的目的:多态:允许将子类类型的指针赋值给父类类型的指针.------------------------------------- 2.

C++语言学习(八)——操作符重载

C++语言学习(八)--操作符重载 一.操作符重载基础 1.操作符重载的语法 通过operator关键字可以定义特殊的函数,operator本质是通过函数重载操作符. Type operator operatorname(const Type p1, const Type p2) { Type ret; return ret; } 2.友元函数重载操作符 可以将操作符重载函数声明为友元函数. #include <iostream> using namespace std; class Comp

PHP学习笔记A

//语法错误(syntax error)在语法分析阶段,源代码并未被执行,故不会有任何输出. /* [命名规则] */常量名 类常量建议全大写,单词间用下划线分隔 // MIN_WIDTH变量名建议用下划线方式分隔 // $var_name函数名建议用驼峰命名法 // varName定界符建议全大写 // <<<DING, <<<'DING'文件名建议全小写和下划线.数字 // func_name.php私有属性名.方法名建议加下划线 // private $_name

20150112--抽象类+接口+重载+自动加载机制-01

回顾 面向对象:自动加载(__autoload),类常量访问(范围解析操作符),静态(属性和方法:self) 设计模式:单例模式(三私一公),工厂模式 面向对象三大特性:封装,继承和多态(PHP不支持) PHP继承:extends(对象继承:属性和非私有方法) PHP继承 方法重写 子类拥有与父类同名的方法. 除了私有的属性和方法之外,系统一律都是去子类中查找属性和方法,但是如果对应的属性和方法是私有的,那么系统一定要去判断$this所代表的上下文(类环境),在哪个类就访问哪个类的私有属性和方法

转载c++常忘的知识点

C++的一些知识点比较零碎,下面清单的形式做一些记录与归纳,以供参考. 1.赋值操作符重载(深复制): (1)由于目标对象可能引用了以前的一些数据,所以应该先delete这些数据: (2)注意到对象可能对自己赋值,所以应该加上下面语句(another表示另一个对象),再进行(1)的操作: (3)函数返回一个指向调用对象的引用: (4)赋值操作符只能通过成员函数重载. 2.静态类成员函数: (1)静态类成员函数在类的声明中要加static关键字,而在定义中则不用: (2)静态类成员函数没用this

php核心知识要点

Php:脚本语言,网站建设,服务器端运行 PHP定义:一种服务器端的 HTML 脚本/编程语言,是一种简单的.面向对象的.解释型的.健壮的.安全的.性能非常之高的.独立于架构的.可移植的.动态的脚本语言.是一种广泛用于 Open Source(开放源代码)的尤其适合 Web 开发并可以嵌入 HTML 的多用途脚本语言.它的语法接近 C,Java 和 Perl,而且容易学习.该语言让 Web 开发人员快速的书写动态生成的网页. PHP简介:Rasmus Lerdorf发展历程(1994:1.0个人

类和对象:静态属性、静态方法

在PHP中,使用关键字 static 修饰成员属性和成员方法被称为静态属性和静态方法.静态属性和静态方法不需要在类被实例化的情况下可以直接使用. 静态属性 与普通的成员属性不同,静态属性属于类本身而不属于类的任何实例.静态属性可以被看做是存储在类当中的全局变量,可以在任何地方通过类来访问它们. 由于静态属性不受任何具体对象的限制,所以不需要建立类实例,而可以直接引用类中的静态属性,使用语法格式如下: 类名称::$静态属性名称 其中,符号”::”被称作范围解析操作符,它可以用于访问静态成员.静态方