热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php中$this、static、final、const、self的用法

本篇文章主要分项了一下关于php类中的$this,static,final,const,self这几个关键字使用方法。$this$this表示当前实例,在类的内部方法访

本篇文章主要分项了一下关于php类中的$this,static,final,const,self这几个关键字使用方法。

$this

$this表示当前实例,在类的内部方法访问未声明为const及static的属性时,使用$this->value='phpernote';的形式。常见用法如:

$this->属性

$this->方法

实例代码如下:

  1. class MyClass{ 
  2.  private $name
  3.  public  function __construct($name){ 
  4.   $this->name=$name
  5.  } 
  6.  public function getname(){ 
  7.   return $this->name; 
  8.  } 
  9.  public  function printName(){ 
  10.   echo $this->getname(); 
  11.  } 
  12. $myclassnew MyClass("I Like www.111cn.net"); 
  13. $myclass->printName();//输出:I Like www.111cn.net 
  14. ?> 

在类里面调用当前类的属性和方法有三种方法,分别是self、parent、$this,这三个关键字的区别是:self用来指向当前的类;parent用于指向当前类的父类,可以使用该关键字调用父类的属性和方法;$this用来在类体内调用自身的属性和方法。

static

关键字可以是self(在类内部调用静态成员时所使用)静态成员所在的类名(在类外调用类内部的静态成员时所使用)

声明一个静态变量如下:

static $val='';

只存在于函数作用域的变量,函数执行之后变量的值不会丢失,只会初始化一次,初始化静态变量不能使用表达式,不用全局变量代替是因为全局变量会被所有函数访问容易造成维护不宜。

在类中使用static有两种主要用途、定义静态成员和定义静态方法。静态成员只保留一个变量的值,这个值对所有实例都是有效的,代码如下:

  1. class MyObject{ 
  2.  public static $myStaticVar=0; 
  3.  function myMethod(){ 
  4.   self::$myStaticVar+=2; 
  5.   echo self::$myStaticVar
  6.  } 
  7. $instance1=new MyObject(); 
  8. $instance1->myMethod(); 
  9. $instance2=new MyObject(); 
  10. $instance2->myMethod(); 
  11. //结果将分别打印2、4 

实例代码如下:

  1. class Book{ 
  2.  static $num=0; 
  3.  public function showMe(){ 
  4.   echo"您是滴".self::$num."位访客"
  5.   self::$num++; 
  6.  } 
  7. $book1=new Book(); 
  8. $book1->showMe(); 
  9. echo"
    "
  10. $book2=new Book(); 
  11. $book2->showMe(); 
  12. echo"
    "
  13. echo"您是滴".Book::$num."位访客"
  14. ?> 
  15. //结果将是: 
  16. //您是滴0位访客 
  17. //您是滴1位访客 
  18. //您是滴2位访客 

另外需要注意的是如果类的方法是static的,他所访问的属性也必须是static的。

final

PHP final关键字可以修饰类同样可以修改类中的方法,但它们的作用是差不多的,即如果你使用了final关键字来修饰了,那么这个被修饰的类或者方法将不能被扩展或者继承。你只能老老实实去引用它。如果你在类前面使用了final,这就是说明这个类不能使用继承;如果你在方法前使用了PHP final关键字,这就是说明这个方法不能被覆盖。道理就是这么简单,让我们也看个简单的示例吧。

最终的类和方法,不能继承,该关键字修饰的方法不能被重写。一般用法如下:

  1. final class MyClass{//此类将不允许被继承 
  2.  final function fun1(){......}//此方法将不允许被重写 

实例代码如下:

  1.    final class BaseClass {    
  2.    public function test() {    
  3.    echo "BaseClass::test() calledn";    
  4.    }    
  5.    final public function moreTesting() {    
  6.    echo "BaseClass::moreTesting() calledn";    
  7.    }    
  8.    }    
  9.    class ChildClass extends BaseClass {    
  10.    public function moreTesting() {    
  11.    echo "ChildClass::moreTesting() calledn";    
  12.    }    
  13.    }    
  14.    // Results in Fatal error: Cannot override final method BaseClass::moreTesting()    
  15.    ?>  

const

在类的内部方法访问已经声明为const及static的属性时,需要使用self::$name的形式调用,实例代码如下:

  1. class clss_a{ 
  2.  private static $name="static class_a";  
  3.  const PI=3.14;  
  4.  public $value;  
  5.  public static function getName(){  
  6.   return self::$name;  
  7.  }  
  8.  //这种写法有误,静态方法不能访问非静态属性  
  9.  public static function getName2(){  
  10.   return self::$value;  
  11.  }  
  12.  public function getPI(){  
  13.   return self::PI;  
  14.  } 

注意const属性的申明格式是const PI=3.14,而不是const $PI=3.14。

self

self表示类本身,指向当前的类。通常用来访问类的静态成员、方法和常量。

推荐阅读
  • 基于函数实现的进制转换工具
    本文介绍了一种利用函数实现不同进制数(二进制、八进制、十进制)之间转换的方法。包括了程序的运行效果展示、所使用的主要函数解析、以及如何验证用户输入的合法性。整个项目仅使用了两个全局变量来存储用户的选项和输入的数值。 ... [详细]
  • ArcGIS技巧:为相邻地块创建指定宽度的隔离带
    在地理信息系统(GIS)的数据处理中,为了满足特定项目的质量检查标准,需要在相邻地块之间创建一定宽度的隔离带。本文将探讨如何使用ArcGIS工具解决这一问题,确保不同地块图斑间保持规定的最小距离。 ... [详细]
  • 本文介绍了如何通过自定义View中的declare-styleable属性创建枚举类型,并在代码中访问这些枚举值的方法。 ... [详细]
  • 本文汇集了使用C#中不同HTTP客户端向Web API上传文件的实例,旨在为开发者提供实用的技术指南。 ... [详细]
  • 本文详细介绍了在PHP中如何创建新文件以及如何使自定义函数在整个项目中全局可用的方法,包括最新的实践技巧。 ... [详细]
  • 解决Android开发中的TextView难题
    探讨了在Android开发过程中遇到的关于TextView组件的常见问题,特别是如何实现多行文字的跑马灯效果,并提供了初步的解决方案和参考资料。 ... [详细]
  • Only2 Labs 是一家专注于视觉设计的工作室,如果您对当前的设计感到不满,或者急需寻找一个可靠的设计合作伙伴,甚至是您的团队项目需要专业指导,Only2 Labs 都将竭诚为您提供帮助。 ... [详细]
  • 解决phpMyAdmin运行错误:mysqli_init(): 属性访问尚未允许
    本文探讨了在使用phpMyAdmin过程中遇到的mysqli_init()函数错误,并提供了有效的解决方案。 ... [详细]
  • 本文探讨了Windows Presentation Foundation (WPF)如何通过扩展Microsoft Build Engine (MSBuild)来增强其构建能力,特别是在处理WPF特有的任务时。 ... [详细]
  • 本文探讨了在执行SQL查询时遇到的因字符集不同而导致查询结果差异的问题,特别是涉及中文字符时。文章分析了在不同字符集设置下,SQL查询结果的变化,并提供了详细的解决方案。 ... [详细]
  • 本文探讨了如何在JavaScript中调用PHP函数及实现两者之间的有效交互,包括通过AJAX请求、动态生成JavaScript代码等方法。 ... [详细]
  • 深入解析PHP Xdebug的安装与应用
    本文详细介绍了PHP Xdebug的安装步骤及其在PHP开发中的重要作用。Xdebug作为一款强大的调试工具,不仅能够帮助开发者追踪代码执行过程,还能有效提升代码质量和系统性能。 ... [详细]
  • 本文对唐代诗人王建的《泛水曲》进行详细的赏析和翻译,探讨其文学价值及艺术特色。 ... [详细]
  • 探讨《深入理解计算机系统》一书中关于寄存器保存规则的理解难题,特别是调用者保存寄存器的使用与恢复机制。 ... [详细]
  • Node.js中子进程的创建与管理详解
    本文深入探讨了Node.js中如何使用child_process模块来创建和管理子进程,包括exec、spawn和fork三种方法的具体应用及其实现细节。 ... [详细]
author-avatar
ka-ka快乐_848
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有