`

php中双冒号的应用

    博客分类:
  • PHP
阅读更多

php类代码中常看到"::"的操作符,这个是作用域限定操作符,是用一个双冒号"::"表示,它用来置顶类中不同作用域的级别。左边是作用域右边是访问作用域的成员。

在php中定义的作用域有self和parent两种(在php6中提供了static作用域)。

self:表示当前类的作用域,与this不同的是它不表示类的某个特定实例,在类之外的代码中不能使用self,而且它不能识别自己在继承中层次的位置。也就是说,当在扩展类中使用self时,它调用的不是父类的方法,而是扩展类的重载的方法。


parent:表示当前类父类的作用域,其余的跟self特性一样。


举例说明php双冒号::操作符:

 

Php代码 复制代码
  1. <?php   
  2. class forasp{   
  3.   static $url="http://blog.csdn.net/abandonship";   
  4.   static $webname = "PHP学习之双冒号的用法";   
  5.   public function writeurl(){   
  6.     echo self::$url;//调用自己的内容   
  7.   }   
  8.   public function writewebname(){   
  9.     echo "测试子类调用父类内容";   
  10.   }   
  11. }   
  12.   
  13. class cn extends forasp{   
  14.   function father(){   
  15.     parent::wirtewebname();   
  16.   }   
  17. }   
  18.   
  19. $a = new forasp();//实例化父类   
  20. $a->writeurl();//调用自身内容   
  21. $b = new cn();   
  22. $b->writewebname();//调用父类内容   
  23. ?>  

 

在调用静态方法中也可以使用::来调用类中的静态方法或者属性,这样可以减少资源使用,因为每个类的实例都会占有一部分资源。


php6中提出static::作用域,是我们不再需要self::和parent::。希望指向最终的实现功能的类时,就用static::,这个限定符会在代码执行前立即计算出继承层中最后那个类的成员,这一过程叫做延迟绑定。

“双冒号操作符”也或称为“作用域限定操作符”(Scope Resolution Operator)可以访问静态、const和类中重写的属性与方法。
在类定义外使用的话,使用类名调用。在PHP 5.3.0,可以使用变量代替类名。


Program List:用变量在类定义外部访问

Php代码 复制代码
  1. <?php   
  2. class Fruit {   
  3.   const CONST_VALUE = 'Fruit Color';   
  4. }   
  5. $classname = 'Fruit';   
  6. echo $classname::CONST_VALUE; // As of PHP 5.3.0   
  7. echo Fruit::CONST_VALUE;   
  8. ?>  

 

Program List:在类定义外部使用双冒号(::)

Php代码 复制代码
  1. <?php   
  2. class Fruit {   
  3.   const CONST_VALUE = 'Fruit Color';   
  4. }   
  5. class Apple extends Fruit   
  6. {   
  7.   public static $color = 'Red';   
  8.   public static function doubleColon() {   
  9.     echo parent::CONST_VALUE . "\n";   
  10.     echo self::$color . "\n";   
  11.   }   
  12. }   
  13. Apple::doubleColon();   
  14. ?>  

 

程序运行结果:

Fruit Color Red

Program List:调用parent方法

 

Php代码 复制代码
  1. <?php   
  2. class Fruit   
  3. {   
  4.     protected function showColor() {   
  5.         echo "Fruit::showColor()\n";   
  6.     }   
  7. }   
  8.   
  9. class Apple extends Fruit   
  10. {   
  11.     // Override parent's definition   
  12.     public function showColor()   
  13.     {   
  14.         // But still call the parent function   
  15.         parent::showColor();   
  16.         echo "Apple::showColor()\n";   
  17.     }   
  18. }   
  19.   
  20. $apple = new Apple();   
  21. $apple->showColor();   
  22. ?>  

 

程序运行结果:
Fruit::showColor()
Apple::showColor()

 

Program List:使用作用域限定符

 

Php代码 复制代码
  1. <?php   
  2.     class Apple   
  3.     {   
  4.         public function showColor()   
  5.         {   
  6.             return $this->color;   
  7.         }   
  8.     }   
  9.     class Banana   
  10.     {   
  11.         public $color;   
  12.         public function __construct()   
  13.         {   
  14.             $this->color = "Banana is yellow";   
  15.         }   
  16.         public function GetColor()   
  17.         {   
  18.             return Apple::showColor();   
  19.         }   
  20.     }   
  21.     $banana = new Banana;   
  22.     echo $banana->GetColor();   
  23. ?>  

 

程序运行结果:
Banana is yellow

Program List:调用基类的方法

Php代码 复制代码
  1. <?php   
  2.   
  3. class Fruit   
  4. {   
  5.     static function color()   
  6.     {   
  7.         return "color";   
  8.     }   
  9.   
  10.     static function showColor()   
  11.     {   
  12.         echo "show " . self::color();   
  13.     }   
  14. }   
  15.   
  16. class Apple extends Fruit   
  17. {   
  18.     static function color()   
  19.     {   
  20.         return "red";   
  21.     }   
  22. }   
  23.   
  24. Apple::showColor();   
  25. // output is "show color"!   
  26.   
  27. ?>  

 

程序运行结果:
show color

分享到:
评论

相关推荐

    php 中 -〉 和 =〉 和 ::

    3. `::`(双冒号,作用域解析操作符): 这是PHP中的一个关键操作符,用于访问静态属性和方法,以及调用类常量。以下是一些用法示例: - 访问静态属性:`Class::static_property`,例如 `MyClass::myStaticVar`。 ...

    PHP5类与对象编程

    范围解析操作符,通常被称为“双冒号”操作符,在PHP中具有非常重要的作用。它可以用来访问静态成员、方法和常量,还可以用于覆盖类中的成员和方法。 **语法示例**: ```php &lt;?php class MyClass { const CONST_...

    PHP5类与对象编程.pdf

    类常量(Class Constants)是PHP中另一个重要的概念,它们在定义后不能更改,且不需要通过对象实例来访问,而是使用类名加双冒号的方式,如`$object::constant`。类常量的值必须在声明时就是一个常量表达式,不能是...

    PHP面向对象之旅深入理解static变量与方法

    静态方法是属于类本身的方法,可以直接通过类名和双冒号`::`来调用,无需创建类的实例。这使得静态方法可以在不创建对象的情况下执行某些操作,如工具函数或类的初始化。例如: ```php class Math { public ...

    PHP常用符号和函数.docx

    - **双冒号运算符**:`::`,通常用于访问类的静态成员(静态属性或静态方法)。例如: ```php class MyClass { public static $myStaticVar = 'Hello World!'; public static function sayHello() { echo ...

    PHP静态调用非静态方法的应用分析

    在PHP中,使用双冒号(::)操作符可以调用静态方法,如`class::method()`。静态方法不依赖于类的实例,它们在类定义时就已经存在,不会随着类的实例化而创建或销毁。静态方法不能访问类的非静态成员变量 `$this`,...

    PHP5面向对象初步-part23pdf

    - **3.3.4 静态抽象方法**:在PHP5.2.0及更高版本中,可以定义静态抽象方法,虽然这在实际应用中较为罕见。 ### 设计模式 **3.4 设计模式之模版模式** - **3.4.1 模版模式实例**:模版模式允许在基类中定义算法的...

    PHP学习笔记

    - `::`:双冒号运算符用于调用类中的静态成员或父类成员。 #### 六、访问控制 - **默认访问权限**:类成员的默认访问级别为`public`,即公共的。 - **私有成员**:使用`private`关键字声明私有成员,此类成员只能...

    Laravel开发-laravel-dompdf

    在上面的代码中,`$data` 是一个数组,其内容可以通过双冒号 `{{ }}` 在视图中访问。 在处理复杂的 HTML 结构时,laravel-dompdf 可能会遇到一些挑战,因为它依赖于 HTML 和 CSS 的浏览器渲染方式。确保你的 HTML ...

    PHP中通过getopt解析GNU C风格命令行选项

    如果是双冒号,则表示参数是可选的;如果后面没有冒号,表示选项不需要参数。 - `$longopts` 是一个数组,包含了长选项的名称和是否需要参数的信息,与短选项相对应。 - `$optind` 是一个引用,用来设置一个索引,...

    Smarty模板变量与调节器实例详解

    在Smarty模板中,变量被定义在双花括号中,例如:`{$variable}`,这是模板变量的标准格式。与直接在PHP中使用`&lt;?php echo $variable; ?&gt;`相比,Smarty模板变量的使用更为简洁,并且能够更有效地将程序逻辑与页面展示...

    JSON用法之将PHP数组转JS数组,JS如何接收PHP数组

    此外,当在JSON中处理字符串值时,需要确保字符串被双引号`""`包围,以保证JSON的格式正确。 在JavaScript与PHP的交互中,使用AJAX技术进行异步数据交换是很常见的场景。AJAX可以在不刷新整个页面的情况下,与...

    PHP的魔术常量__METHOD__简介

    `__METHOD__`魔术常量在PHP5及更高版本中被引入,它返回当前执行的方法名,包括类名和方法名,用双冒号`::`分隔。例如,在以下代码中: ```php &lt;?php class Chhua { function test() { echo __METHOD__; } } $e...

    GetOpt一个命令行参数解析器

    在PHP开发中,特别是在构建命令行界面(CLI)应用程序时,GetOpt扮演着至关重要的角色。它能够帮助开发者从传递给脚本的参数中提取和解析特定的信息,从而实现更加灵活和强大的功能。 命令行参数解析是编程中的一个...

    探讨PHP中this,self,parent的区别详解

    在实际的编程应用中,"this"、"self"和"parent"关键字能够帮助程序员写出更清晰、更易于维护和扩展的面向对象代码。"this"关注于当前对象实例,"self"关注于类本身,而"parent"关注于继承层级中的父类。 举个例子来...

    php提取字符串中网站url地址的方法

    - `:\/\/` 匹配冒号后的双斜杠,它们是URL协议后的必要部分。 - `[a-z]+` 匹配域名的开始部分,它由一个小写字母开始。 - `[.]{1}` 匹配域名中的点。 - `[a-z\d\-]+` 匹配域名的后续部分,这部分可能包含小写字母、...

    php5.2以下版本无json_decode函数的解决方法

    因此,在有性能要求的应用中,应尽量采用更为高效和安全的方法。 总之,虽然php5.2以下版本的PHP没有内置json_decode函数,但我们通过自定义函数或引入第三方类,仍然可以实现JSON数据的解析。这样的解决方案虽然...

    PHP开发者必须掌握的6个关键字

    静态属性和方法可以通过类名加双冒号(::)来访问,而不是通过对象。 5. Final: Final关键字用于防止类或方法被继承或重写。当一个方法被声明为final,意味着它不能在子类中被覆盖,保持了函数行为的一致性。同样...

    PHP面向对象概念

    特别地,PHP特有的`::`(Paamayim Nekudotayim,双冒号)操作符,它是PHP中的范围解析操作符,用于访问静态成员变量和方法。通过使用`parent::`可以在子类中访问父类中的成员和方法,避免了直接使用父类名而造成的硬...

Global site tag (gtag.js) - Google Analytics