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程序的php代码
Apr 07 PHP
基于PHP CURL获取邮箱地址的详解
Jun 03 PHP
模板引擎smarty工作原理以及使用示例
May 25 PHP
php读取csv数据保存到数组的方法
Jan 03 PHP
php计算两个文件相对路径的方法
Mar 14 PHP
如何解决phpmyadmin导入数据库文件最大限制2048KB
Oct 09 PHP
浅谈PHP中try{}catch{}的使用方法
Dec 09 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
Dec 25 PHP
php实现微信模板消息推送
Mar 30 PHP
Laravel基础_关于view共享数据的示例讲解
Oct 14 PHP
Laravel手动返回错误码示例
Oct 22 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 多行多列显示
2009/08/15 PHP
php中的filesystem文件系统函数介绍及使用示例
2014/02/13 PHP
我整理的PHP 7.0主要新特性
2016/01/07 PHP
yii2 页面底部加载css和js的技巧
2016/04/21 PHP
php文件包含目录配置open_basedir的使用与性能详解
2017/04/03 PHP
PHP面向对象中new self()与 new static()的区别浅析
2017/08/17 PHP
javascript知识点收藏
2007/02/22 Javascript
javascript实现tabs选项卡切换效果(扩展版)
2013/03/19 Javascript
jquery改变disabled的boolean状态的三种方法
2013/12/13 Javascript
node.js中的buffer.slice方法使用说明
2014/12/10 Javascript
jQuery中removeClass()方法用法实例
2015/01/05 Javascript
js的window.showModalDialog及window.open用法实例分析
2015/01/29 Javascript
使用javascript插入样式
2016/03/14 Javascript
JS实现AES加密并与PHP互通的方法分析
2017/04/19 Javascript
vue按需引入element Transfer 穿梭框
2017/09/30 Javascript
angularjs实现柱状图动态加载的示例
2017/12/11 Javascript
前端axios下载excel文件(二进制)的处理方法
2018/07/31 Javascript
使用vue-cli3 创建vue项目并配置VS Code 自动代码格式化 vue语法高亮问题
2019/05/14 Javascript
解决vue cli4升级sass-loader(v8)后报错问题
2020/07/30 Javascript
design vue 表格开启列排序的操作
2020/10/28 Javascript
vue element-ul实现展开和收起功能的实例代码
2020/11/25 Vue.js
swiper实现导航滚动效果
2020/12/13 Javascript
原生js中运算符及流程控制示例详解
2021/01/05 Javascript
[01:25:09]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第二场
2014/05/24 DOTA
详解python之协程gevent模块
2018/06/14 Python
python 堆和优先队列的使用详解
2019/03/05 Python
python爬虫之自制英汉字典
2019/06/24 Python
Pandas实现dataframe和np.array的相互转换
2019/11/30 Python
Python递归及尾递归优化操作实例分析
2020/02/01 Python
matplotlib 生成的图像中无法显示中文字符的解决方法
2020/06/10 Python
深入CSS3 动画效果的总结详解
2013/05/09 HTML / CSS
个人实用简单的自我评价
2013/10/19 职场文书
消防安全责任书范本
2014/04/15 职场文书
向雷锋同志学习倡议书
2015/04/27 职场文书
《秦兵马俑》教学反思
2016/02/24 职场文书
Python绘制分类图的方法
2021/04/20 Python