设为首页 收藏本站
查看: 716|回复: 0

[经验分享] php中双冒号的应用

[复制链接]

尚未签到

发表于 2017-3-28 14:31:26 | 显示全部楼层 |阅读模式
  php类代码中常看到"::"的操作符,这个是作用域限定操作符,是用一个双冒号"::"表示,它用来置顶类中不同作用域的级别。左边是作用域右边是访问作用域的成员。
  在php中定义的作用域有self和parent两种(在php6中提供了static作用域)。
  self:表示当前类的作用域,与this不同的是它不表示类的某个特定实例,在类之外的代码中不能使用self,而且它不能识别自己在继承中层次的位置。也就是说,当在扩展类中使用self时,它调用的不是父类的方法,而是扩展类的重载的方法。
  
parent:表示当前类父类的作用域,其余的跟self特性一样。
  
举例说明php双冒号::操作符:
Php代码 DSC0000.gif


  • <?php   
  • class forasp{   
  •   static $url="http://blog.csdn.net/abandonship";   
  •   static $webname = "PHP学习之双冒号的用法";   
  •   public function writeurl(){   
  •     echo self::$url;//调用自己的内容   
  •   }   
  •   public function writewebname(){   
  •     echo "测试子类调用父类内容";   
  •   }   
  • }   
  •   
  • class cn extends forasp{   
  •   function father(){   
  •     parent::wirtewebname();   
  •   }   
  • }   
  •   
  • $a = new forasp();//实例化父类   
  • $a->writeurl();//调用自身内容   
  • $b = new cn();   
  • $b->writewebname();//调用父类内容   
  • ?>  

  在调用静态方法中也可以使用::来调用类中的静态方法或者属性,这样可以减少资源使用,因为每个类的实例都会占有一部分资源。
  
php6中提出static::作用域,是我们不再需要self::和parent::。希望指向最终的实现功能的类时,就用static::,这个限定符会在代码执行前立即计算出继承层中最后那个类的成员,这一过程叫做延迟绑定。
  “双冒号操作符”也或称为“作用域限定操作符”(Scope Resolution Operator)可以访问静态、const和类中重写的属性与方法。
在类定义外使用的话,使用类名调用。在PHP 5.3.0,可以使用变量代替类名。
  
Program List:用变量在类定义外部访问
Php代码


  • <?php   
  • class Fruit {   
  •   const CONST_VALUE = 'Fruit Color';   
  • }   
  • $classname = 'Fruit';   
  • echo $classname::CONST_VALUE; // As of PHP 5.3.0   
  • echo Fruit::CONST_VALUE;   
  • ?>  

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


  • <?php   
  • class Fruit {   
  •   const CONST_VALUE = 'Fruit Color';   
  • }   
  • class Apple extends Fruit   
  • {   
  •   public static $color = 'Red';   
  •   public static function doubleColon() {   
  •     echo parent::CONST_VALUE . "\n";   
  •     echo self::$color . "\n";   
  •   }   
  • }   
  • Apple::doubleColon();   
  • ?>  

  程序运行结果:
  Fruit Color Red

  Program List:调用parent方法
Php代码


  • <?php   
  • class Fruit   
  • {   
  •     protected function showColor() {   
  •         echo "Fruit::showColor()\n";   
  •     }   
  • }   
  •   
  • class Apple extends Fruit   
  • {   
  •     // Override parent's definition   
  •     public function showColor()   
  •     {   
  •         // But still call the parent function   
  •         parent::showColor();   
  •         echo "Apple::showColor()\n";   
  •     }   
  • }   
  •   
  • $apple = new Apple();   
  • $apple->showColor();   
  • ?>  

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

  Program List:使用作用域限定符
Php代码


  • <?php   
  •     class Apple   
  •     {   
  •         public function showColor()   
  •         {   
  •             return $this->color;   
  •         }   
  •     }   
  •     class Banana   
  •     {   
  •         public $color;   
  •         public function __construct()   
  •         {   
  •             $this->color = "Banana is yellow";   
  •         }   
  •         public function GetColor()   
  •         {   
  •             return Apple::showColor();   
  •         }   
  •     }   
  •     $banana = new Banana;   
  •     echo $banana->GetColor();   
  • ?>  

  程序运行结果:
Banana is yellow

Program List:调用基类的方法
Php代码


  • <?php   
  •   
  • class Fruit   
  • {   
  •     static function color()   
  •     {   
  •         return "color";   
  •     }   
  •   
  •     static function showColor()   
  •     {   
  •         echo "show " . self::color();   
  •     }   
  • }   
  •   
  • class Apple extends Fruit   
  • {   
  •     static function color()   
  •     {   
  •         return "red";   
  •     }   
  • }   
  •   
  • Apple::showColor();   
  • // output is "show color"!   
  •   
  • ?>  

  程序运行结果:
show color

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-356620-1-1.html 上篇帖子: php异常处理初步学习(转) 下篇帖子: As3利用AMFPHP与PHP进行通讯
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表