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中文URL编解码(urlencode()rawurlencode()
Jul 03 PHP
PHP实现变色验证码实例
Jan 06 PHP
用PHP和Shell写Hadoop的MapReduce程序
Apr 15 PHP
php实现文件下载功能的几个代码分享
May 10 PHP
destoon安装出现Internal Server Error的解决方法
Jun 21 PHP
ThinkPHP页面跳转success与error方法概述
Jun 25 PHP
实例讲解PHP面向对象之多态
Aug 20 PHP
destoon实现VIP排名一直在前面排序的方法
Aug 21 PHP
PHP 类与构造函数解析
Feb 06 PHP
PHP+Ajax无刷新带进度条图片上传示例
Feb 08 PHP
PHP简单获取随机数的常用方法小结
Jun 07 PHP
PHP中用Trait封装单例模式的实现
Dec 18 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读取30天之内的根据算法排序的代码
2008/04/06 PHP
php中序列化与反序列化详解
2017/02/13 PHP
php中文语义分析实现方法示例
2019/09/28 PHP
js中符号转意问题示例探讨
2013/08/19 Javascript
浅析JQuery UI Dialog的样式设置问题
2013/12/18 Javascript
JS常用字符串处理方法应用总结
2014/05/22 Javascript
JavaScript中检查对象property的存在性方法介绍
2014/12/30 Javascript
javacript使用break内层跳出外层循环分析
2015/01/12 Javascript
浅析javascript的return语句
2015/12/15 Javascript
BootStrap实现手机端轮播图左右滑动事件
2016/10/13 Javascript
EasyUI学习之Combobox级联下拉列表(2)
2016/12/29 Javascript
微信小程序 两种滑动方式(横向滑动,竖向滑动)详细及实例代码
2017/01/13 Javascript
常用的几个JQuery代码片段
2017/03/13 Javascript
浅谈Webpack 持久化缓存实践
2018/03/22 Javascript
Vue中使用create-keyframe-animation与动画钩子完成复杂动画
2019/04/09 Javascript
layui 弹出删除确认界面的实例
2019/09/06 Javascript
layui-tree实现Ajax异步请求后动态添加节点的方法
2019/09/23 Javascript
JS+css3实现幻灯片轮播图
2020/08/14 Javascript
[01:35]2018年度CS GO最佳战队-完美盛典
2018/12/17 DOTA
Python求解平方根的方法
2015/03/11 Python
仅利用30行Python代码来展示X算法
2015/04/01 Python
详细介绍Python中的偏函数
2015/04/27 Python
Python Numpy 数组的初始化和基本操作
2018/03/13 Python
Python实现的直接插入排序算法示例
2018/04/29 Python
python3中rank函数的用法
2019/11/27 Python
Jupyter notebook设置背景主题,字体大小及自动补全代码的操作
2020/04/13 Python
加拿大租车网站:Enterprise Rent-A-Car
2018/07/26 全球购物
皇家阿尔伯特瓷器美国官网:Royal Albert美国
2020/02/16 全球购物
巴西最大的巴士票务门户:Quero Passagem
2020/11/21 全球购物
什么是表空间(tablespace)和系统表空间(System tablespace)
2013/02/25 面试题
聘用意向书
2014/07/29 职场文书
老干部工作汇报材料
2014/10/28 职场文书
太行山上观后感
2015/06/05 职场文书
利用python Pandas实现批量拆分Excel与合并Excel
2021/05/23 Python
python基础之类属性和实例属性
2021/10/24 Python
Win11如何修改dns?Win11修改dns图文教程
2022/01/18 数码科技