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 上传文件大小限制
Jul 05 PHP
用来解析.htpasswd文件的PHP类
Sep 05 PHP
php压缩HTML函数轻松实现压缩html/js/Css及注意事项
Jan 27 PHP
关于zend studio 出现乱码问题的总结
Jun 23 PHP
php实现文件编码批量转换
Mar 10 PHP
php最简单的删除目录与文件实现方法
Nov 28 PHP
PHP SESSION的增加、删除、修改、查看操作
Mar 20 PHP
Zend Studio使用技巧两则
Apr 01 PHP
PHP模板引擎Smarty之配置文件在模板变量中的使用方法示例
Apr 11 PHP
php mysql操作mysql_connect连接数据库实例详解
Dec 26 PHP
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
Apr 21 PHP
使用php的mail()函数实现发送邮件功能
Jun 03 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
json的键名为数字时的调用方式(示例代码)
2013/11/15 PHP
PHP临时文件的安全性分析
2014/07/04 PHP
PHP获取文件扩展名的4种方法
2015/11/24 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
Nigma vs AM BO3 第一场2.13
2021/03/10 DOTA
javascript 类型判断代码分析
2010/03/28 Javascript
jquery 学习之二 属性相关
2010/11/23 Javascript
使用jQuery设置disabled属性与移除disabled属性
2014/08/21 Javascript
js实现获取鼠标当前的位置
2016/12/14 Javascript
jquery与ajax获取特殊字符实例详解
2017/01/08 Javascript
Vue SSR 组件加载问题
2018/05/02 Javascript
webstorm中vue语法的支持详解
2018/05/09 Javascript
JavaScript的级联函数用法简单示例【链式调用】
2019/03/26 Javascript
微信小程序实现Swiper轮播图效果
2019/11/22 Javascript
js Math数学简单使用操作示例
2020/03/13 Javascript
Python模拟登录验证码(代码简单)
2016/02/06 Python
Python使用redis pool的一种单例实现方式
2016/04/16 Python
python实现用户管理系统
2018/01/10 Python
使用python进行文本预处理和提取特征的实例
2018/06/05 Python
对python while循环和双重循环的实例详解
2019/08/23 Python
python写一个随机点名软件的实例
2019/11/28 Python
iphoneX 适配客户端H5页面的方法教程
2017/12/08 HTML / CSS
HTML5调用手机发短信和打电话功能
2020/04/29 HTML / CSS
Jogun Shop中文官网:韩国知名时尚男装网站
2016/10/12 全球购物
SmartBuyGlasses中国:唯视良品(销售名牌太阳镜、墨镜和眼镜框)
2017/07/03 全球购物
Holland & Barrett爱尔兰:英国领先的健康零售商
2019/03/31 全球购物
结构工程研究生求职信
2013/10/13 职场文书
科技活动周标语
2014/10/08 职场文书
萤火虫之墓观后感
2015/06/05 职场文书
爱的教育读书笔记
2015/06/26 职场文书
react中props 的使用及进行限制的方法
2021/04/28 Javascript
制作能在nginx和IIS中使用的ssl证书
2021/06/21 Servers
聊聊Python String型列表求最值的问题
2022/01/18 Python
js中Map和Set的用法及区别实例详解
2022/02/15 Javascript
使用scrapy实现增量式爬取方式
2022/06/21 Python
springboot读取resources下文件的方式详解
2022/06/21 Java/Android