`

PHP

    博客分类:
  • php
 
阅读更多

PHP中::、->、self、parent::、$this操作符的区别 - 

 

在访问PHP类中的成员变量或方法时,如果被引用的变量或者方法被声明成const(定义常量)或者static(声明静态),那么就必须使用操作符::,反之如果被引用的变量或者方法没有被声明成const或者static,那么就必须使用操作符->。

另外,如果从类的内部访问const或者static变量或者方法,那么就必须使用自引用的self,反之如果从类的内部访问不为const或者static变量或者方法,那么就必须使用自引用的$this。

静态变量

是只存在于函数作用域的变量, 不过, 在函数执行完成后,这种变量的 值不会丢失 ,也就是说, 在下一次调用这个函数时,变量仍然会记得原来的值. 要将某个变量定义为静态的, 只需要在变量前加上  static  关键字即可.

 

类中静态元素的使用

在类中, static 关键字有两种主要用法, 一是用来 定义静态成员 ,一是用来 定义静态方法 . 在类的内部, 可以使用 作用域限定符  (::) 来访问不同层次作用域的变量.

 


静态成员

静态成员是一种类变量, 可以把它看成时 属于整个类 而不是属于类的某个实例. 与一般的实例变量不同的是, 静态成员只保留一个变量值, 而这个变量值 对所有的实例都是有效 的, 也就是说, 所有的实例共享这个成员.

$this 只表示类的当前实例,  而  self:: 表示的是类本身 ,在类之外的代码中不能使用这个操作符,而且它不能识别自己在继承树层次结构中的位置.

也就是说, 在扩展类中使用 self  作用域时,  self  可以调用基类中声明的方法, 但它调用的总是已经在扩展类中重写的方法. 与 $this  不同的是, 在使用静态变量时,必须在作用域限定符后面加上 $ 符号.

在扩展类中, 在基类的方法被重写的情况下,使用  parent  作用域调用定义在基类中的方法. 静态成员也可以只属于父类 . 如果在子类和父类中同时声明了某个成员,也可以使用 parant::  在子类中访问父类中的变量. 在这种情况下, 父类的静态成员和子类的静态成员保存的是不同的值.

可以在 :: 操作符的左边写上类的名称来静态地访问某个成员, 这样 避免创建类的实例 . 不仅省略掉实例化类的代码, 而且还会 更高效 , 因为类的每个实例都会占用一小部分的系统资源.

在使用 :: 操作符访问成员变量时, 需要再次注意对 $ 符号的使用. 因为PHP当前不支持动态的静态变量的使用, 也就是说不支持可变的静态变量. 在使用$this->$var时, 被访问的成员是包含在$var中的变量的值.  而不用$符号访问某个变量实际上查找的是类的某个常量而常量是不能通过$this来访问的 .

PHP6 中提出的static:: 作用域使我们不再需要使用self:: 和parent::. 当希望指向最终的实现功能的类时, 就可以使用static::, 这个限定符会在代码执行之前立即计算出继承层次机构上最后那个类的成员. 之一过程被称为延迟绑定, 它使我们可以在子类中重写某个静态变量, 并且也可以从某个在父类中声明的函数中反问这个最终成员.


静态方法

静态方法和非静态方法之间有一个重要的区别: 在调用静态方法时,  不再需要拥有类的实例 .

静态方法和非静态方法 使用原则 :

一是如果某个方法中不包含$this 变量, 就应该时静态方法; 如果不需要类的实例, 可能还应该使用静态类, 这样可以免去实例化类的工作. 另, 在静态方法中时不能使用$this 变量的, 因为静态方法不属于某个特定的实例.

 

PHP中使用作用域限定操作符时, 用变量作为类的名称时不允许的.

 

  • parent:: 可用于调用父类中定义的成员方法。
  • parent::的追溯不仅于直接父类。
注:
在类里面的时候,$this->func()和self::func()没什么区别。
在外部的时候,->必须是实例化后的对象使用; 而::可以是未实例化的类名直接调用。
举个例子:
class Mytest{
    function ccc($str){
        echo $str;
    }
}
Mytest::ccc("123456");
$object = new Mytest();
$object->ccc("123456"
分享到:
评论

相关推荐

    class.phpmailer.php

    《PHPMailer邮件发送类详解与应用》 在PHP开发中,发送邮件是一项常见的需求,而PHPMailer是一个强大的、广泛使用的邮件发送类库,尤其适用于PHP5及以上版本。它提供了丰富的功能,包括支持SMTP验证、POP3收信以及...

    PHP 基础实例教程(PHP网页实例版)

    PHP 基础实例 在HTML中嵌入PHP 使用 PHP 标记 PHP 语句 使用 PHP 注释 PHP 语句间的空格问题 添加动态内容 使用 PHP 函数 PHP nl2br()格式化输出 PHP 打印格式化输出 PHP 字符串的整理 PHP 改变字符串中字母的大小写...

    PHP连接串口程序php_ser

    php实现RS232串口通信 下载php_ser_5.2.0.zip 解冻把php_ser放到ext目录下, php.ini里加上: extension=php_ser.dll PHP code string ser_version( void ) void ser_open( string port, int baudrate, int databits, ...

    PHP5.4+php.ini标配.rar

    【PHP5.4详解】 PHP(Hypertext Preprocessor)是一种广泛使用的开源脚本语言,尤其在Web开发领域。PHP5.4是该语言的一个重要版本,它在2012年发布,引入了许多新特性,提升了性能和开发效率。 1. **命名空间...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    标题:PHP基础教程 出处:风流的CG网络日志 时间:Mon, 28 Aug 2006 07:24:34 +0000 作者:yufeng 地址:http:///read.php?38 内容: 提供给新手学习的 PHP新手教程,是一个比较有价值的PHP新手教程! 一、PHP...

    ZbarCode For PHP (PHP识别二维码)

    支持 PHP 版本 (Thread Safe): 5.5.* x86 5.5.* x64 5.6.* x86 5.6.* x64 测试环境 Windows7 64bit PHP 5.5.35 TS x86 PHP 5.5.35 TS x64 PHP 5.6.21 TS x86 PHP 5.6.21 TS x64 将对应的版本 ...

Global site tag (gtag.js) - Google Analytics