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+java实现自动新闻滚动窗口
Oct 09 PHP
PHP实现MySQL更新记录的代码
Jun 07 PHP
PHP编码转换函数 自动转换字符集支持数组转换
Dec 16 PHP
深入探讨<br />和 \r\n两者有什么区别??
Jun 05 PHP
解析php函数method_exists()与is_callable()的区别
Jun 21 PHP
php实现的一个很好用HTML解析器类可用于采集数据
Sep 23 PHP
ThinkPHP实现带验证码的文件上传功能实例
Nov 01 PHP
Yii中表单用法实例详解
Jan 05 PHP
magento后台无法登录解决办法的两种方法
Dec 09 PHP
PHP chr()函数讲解
Feb 11 PHP
Laravel 实现在Blade模版中使用全局变量代替路径的例子
Oct 22 PHP
PHP查找一列有序数组是否包含某值的方法
Feb 07 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中通过加号合并数组的一个简单方法分享
2011/01/27 PHP
关于URL最大长度限制的相关资料查证
2014/12/23 PHP
打豆豆小游戏 用javascript编写的[打豆豆]小游戏
2013/01/08 Javascript
设为首页加入收藏兼容360/火狐/谷歌/IE等主流浏览器的代码
2013/03/26 Javascript
JS 去前后空格大全(IE9亲测)
2013/07/15 Javascript
js 实现 input type=&quot;file&quot; 文件上传示例代码
2013/08/07 Javascript
JavaScript模拟实现键盘打字效果
2015/06/29 Javascript
Jquery uploadify上传插件使用详解
2016/01/13 Javascript
jQuery操作Table技巧大汇总
2016/01/23 Javascript
Bootstrap3.0学习教程之JS折叠插件
2016/05/27 Javascript
jQuery自制提示框tooltip改进版
2016/08/01 Javascript
JS动态计算移动端rem的解决方案
2016/10/14 Javascript
基于JavaScript实现数码时钟效果
2020/03/30 Javascript
基于Vue单文件组件详解
2017/09/15 Javascript
vue.js实现简单轮播图效果
2017/10/10 Javascript
vue打包后显示空白正确处理方法
2017/11/01 Javascript
利用Dectorator分模块存储Vuex状态的实现
2019/02/05 Javascript
生产制造追溯系统之在线打印功能
2019/06/03 Javascript
javascript实现左右缓动动画函数
2020/11/25 Javascript
python网络编程之文件下载实例分析
2015/05/20 Python
深入浅析Python字符编码
2015/11/12 Python
numpy找出array中的最大值,最小值实例
2018/04/03 Python
Python 实现交换矩阵的行示例
2019/06/26 Python
python实现按关键字筛选日志文件
2019/12/24 Python
导致python中import错误的原因是什么
2020/07/01 Python
H5页面适配iPhoneX(就是那么简单)
2019/12/02 HTML / CSS
办公室年终个人自我评价
2013/10/28 职场文书
实习单位接收函
2014/01/11 职场文书
考研复习计划
2015/01/19 职场文书
交通事故调解协议书
2015/05/20 职场文书
同意落户证明
2015/06/19 职场文书
教你利用Selenium+python自动化来解决pip使用异常
2021/05/20 Python
详细聊一聊mysql的树形结构存储以及查询
2022/04/05 MySQL
TypeScript 使用 Tuple Union 声明函数重载
2022/04/07 Javascript
Oracle 多表查询基本语法实例
2022/04/18 Oracle
Java实现添加条码或二维码到Word文档
2022/06/01 Java/Android