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 16 PHP
简单的PHP多图上传小程序代码
Jul 17 PHP
php strnatcmp()函数的用法总结
Nov 27 PHP
深入解读php中关于抽象(abstract)类和抽象方法的问题分析
Jan 03 PHP
php获取用户浏览器版本的方法
Jan 03 PHP
Zend Framework常用校验器详解
Dec 09 PHP
使用ThinkPHP生成缩略图及显示
Apr 27 PHP
php 函数使用可变数量的参数方法
May 02 PHP
yii2中LinkPager增加总页数和总记录数的实例
Aug 28 PHP
laravel获取不到session的三种解决办法【推荐】
Sep 16 PHP
TP5框架使用QueryList采集框架爬小说操作示例
Mar 26 PHP
php中用unset销毁变量并释放内存
May 10 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中使用sleep造成mysql读取失败的案例和解决方法
2014/08/21 PHP
几行代码轻松实现PHP文件打包下载zip
2017/03/01 PHP
详解PHP处理字符串类似indexof的方法函数
2017/06/11 PHP
CI框架简单分页类用法示例
2020/06/06 PHP
Javascript调用XML制作连动下拉列表框
2006/06/25 Javascript
Javascript中获取对象的原型对象的方法小结
2015/02/25 Javascript
在JavaScript的jQuery库中操作AJAX的方法讲解
2015/08/15 Javascript
JS获取CSS样式(style/getComputedStyle/currentStyle)
2016/01/19 Javascript
实例讲解jquery中mouseleave和mouseout的区别
2016/02/17 Javascript
jQuery绑定事件-多种实现方式总结
2016/05/09 Javascript
jQuery多文件异步上传带进度条实例代码
2016/08/16 Javascript
javascript实现的上下无缝滚动效果
2016/09/19 Javascript
javascript基本数据类型及类型检测常用方法小结
2016/12/14 Javascript
RequireJS 依赖关系的实例(推荐)
2017/01/21 Javascript
使用requirejs模块化开发多页面一个入口js的使用方式
2017/06/14 Javascript
Vue.js进行查询操作的实例详解
2017/08/25 Javascript
简单实现节流函数和防抖函数过程解析
2019/10/08 Javascript
[49:41]NB vs NAVI Supermajor小组赛A组 BO3 第一场 6.2
2018/06/03 DOTA
[46:28]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
python生成器表达式和列表解析
2016/03/10 Python
python中字符串类型json操作的注意事项
2017/05/02 Python
python抓取网站的图片并下载到本地的方法
2018/05/22 Python
flask框架实现连接sqlite3数据库的方法分析
2018/07/16 Python
对numpy中的where方法嵌套使用详解
2018/10/31 Python
Django 内置权限扩展案例详解
2019/03/04 Python
Python with用法:自动关闭文件进程
2019/07/10 Python
Python Numpy库常见用法入门教程
2020/01/16 Python
手把手教你从PyCharm安装到激活(最新激活码),亲测有效可激活至2089年
2020/11/25 Python
美国高品质个性化珠宝销售网站:Jewlr
2018/05/03 全球购物
俄罗斯有趣和原创礼物网上商店:MagicMag
2019/08/01 全球购物
经典的班主任推荐信
2013/10/28 职场文书
行政办公员自我评价分享
2013/12/14 职场文书
出国导师推荐信
2014/01/16 职场文书
小学语文业务学习材料
2014/06/02 职场文书
springboot使用Redis作缓存使用入门教程
2021/07/25 Redis
http通过StreamingHttpResponse完成连续的数据传输长链接方式
2022/02/12 Python