php类中的$this,static,final,const,self这几个关键字使用方法


Posted in PHP onDecember 14, 2015

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

$this

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

$this->属性

$this->方法

举例如下:

<?php
class MyClass{
 private $name;
 public function __construct($name){
 $this->name=$name;
 }
 public function getname(){
 return $this->name;
 }
 public function printName(){
 echo $this->getname();
 }
}
$myclass= new MyClass("I Like 3water.com");
$myclass->printName();//输出:I Like 3water.com
?>

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

static

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

声明一个静态变量如下: 

static $val='';

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

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

<?php
class MyObject{
 public static $myStaticVar=0;
 function myMethod(){
 self::$myStaticVar+=2;
 echo self::$myStaticVar;
 }
}
$instance1=new MyObject();
$instance1->myMethod();
$instance2=new MyObject();
$instance2->myMethod();
//结果将分别打印2、4

 代码如下

<?php
class Book{
 static $num=0;
 public function showMe(){
 echo"您是滴".self::$num."位访客";
 self::$num++;
 }
}
$book1=new Book();
$book1->showMe();
echo"<br>";
$book2=new Book();
$book2->showMe();
echo"<br>";
echo"您是滴".Book::$num."位访客";
?>

结果将是:

您是滴0位访客

您是滴1位访客

您是滴2位访客

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

final

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

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

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


< ?PHP  
  final class BaseClass {  
  public function test() {  
  echo "BaseClass::test() calledn";  
  }  
  final public function moreTesting() {  
  echo "BaseClass::moreTesting() calledn";  
  }  
  }  
  class ChildClass extends BaseClass {  
  public function moreTesting() {  
  echo "ChildClass::moreTesting() calledn";  
  }  
  }  
  // Results in Fatal error: Cannot override final method BaseClass::moreTesting()  
  ?>

const

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

<?php
class clss_a{
 private static $name="static class_a"; 
 const PI=3.14; 
 public $value; 
 public static function getName(){ 
 return self::$name; 
 } 
 //这种写法有误,静态方法不能访问非静态属性 
 public static function getName2(){ 
 return self::$value; 
 } 
 public function getPI(){ 
 return self::PI; 
 }
}

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

  self

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

以上内容简单给大家介绍了php类中的$this,static,final,const,self这几个关键字使用方法,希望大家喜欢。

PHP 相关文章推荐
PHP的FTP学习(四)
Oct 09 PHP
PHP如何编写易读的代码
Jul 10 PHP
在PHP中设置、使用、删除Cookie的解决方法
May 06 PHP
php set_time_limit()函数的使用详解
Jun 05 PHP
PHP 使用pcntl和libevent 实现Timer功能
Oct 27 PHP
PHP开发框架kohana中处理ajax请求的例子
Jul 14 PHP
php时间戳格式化显示友好的时间函数分享
Oct 21 PHP
Yii框架创建cronjob定时任务的方法分析
May 23 PHP
php基于数组函数实现关联表的编辑操作示例
Jul 04 PHP
laravel Model 执行事务的实现
Oct 10 PHP
php+iframe 实现上传文件功能示例
Mar 04 PHP
php实现根据身份证获取精准年龄
Feb 26 PHP
Yii2隐藏frontend/web和backend/web的方法
Dec 12 #PHP
使用PHP+AJAX让WordPress动态加载文章的教程
Dec 11 #PHP
WordPress中制作导航菜单的PHP核心方法讲解
Dec 11 #PHP
搭建Vim为自定义的PHP开发工具的一些技巧
Dec 11 #PHP
PHP开发中AJAX技术的简单应用
Dec 11 #PHP
基于PHP如何把汉字转化为拼音
Dec 11 #PHP
PHP异常处理Exception类
Dec 11 #PHP
You might like
PHP查询MySQL大量数据的时候内存占用分析
2011/07/22 PHP
php建立Ftp连接的方法
2015/03/07 PHP
PHP解密Unicode及Escape加密字符串
2015/05/17 PHP
prototype 1.5相关知识及他人笔记
2006/12/16 Javascript
背景图跟随鼠标移动的Mootools插件实现代码
2011/12/12 Javascript
jquery插件jquery.dragscale.js实现拖拽改变元素大小的方法(附demo源码下载)
2016/02/25 Javascript
老生常谈js动态添加事件--- 事件委托
2016/07/19 Javascript
JS提示:Uncaught SyntaxError: Unexpected token ILLEGAL错误的解决方法
2016/08/19 Javascript
提高Web性能的前端优化技巧总结
2017/02/27 Javascript
vue同步父子组件和异步父子组件的生命周期顺序问题
2018/10/07 Javascript
通过JS深度判断两个对象字段相同
2019/06/14 Javascript
layui 富文本图片上传接口与普通按钮 文件上传接口的例子
2019/09/23 Javascript
关于小程序优化的一些建议(小结)
2020/12/10 Javascript
用python实现批量重命名文件的代码
2012/05/25 Python
python提取图像的名字*.jpg到txt文本的方法
2018/05/10 Python
Python字符串处理的8招秘籍(小结)
2019/08/13 Python
python-Web-flask-视图内容和模板知识点西宁街
2019/08/23 Python
Python基于yaml文件配置logging日志过程解析
2020/06/23 Python
利用django创建一个简易的博客网站的示例
2020/09/29 Python
CSS3字体效果的设置方法小结
2016/06/13 HTML / CSS
做一个能自适应高度的textarea的示例代码
2019/09/06 HTML / CSS
世界领先的高品质定制产品平台:Zazzle
2017/07/23 全球购物
UGG美国官网:购买UGG雪地靴、拖鞋和鞋子
2017/12/31 全球购物
UNIX文件系统分类
2014/11/11 面试题
基于Python 函数和方法的区别说明
2021/03/24 Python
师范生自荐信
2013/10/27 职场文书
大学校庆策划书
2014/01/31 职场文书
公证书样本
2014/04/10 职场文书
设计专业自荐信
2014/06/19 职场文书
煤矿安全生产月活动总结
2014/07/05 职场文书
一年级数学上册复习计划
2015/01/17 职场文书
亚布力滑雪场导游词
2015/02/09 职场文书
三好学生个人总结
2015/02/15 职场文书
主持人开场白台词
2015/05/29 职场文书
Python 读写 Matlab Mat 格式数据的操作
2021/05/19 Python
sentinel支持的redis高可用集群配置详解
2022/04/01 Redis