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实现分页的一个示例
Oct 09 PHP
APMServ使用说明
Oct 23 PHP
一些PHP写的小东西
Dec 06 PHP
收藏的PHP常用函数 推荐收藏保存
Feb 21 PHP
php实现QQ空间获取当前用户的用户名并生成图片
Jul 25 PHP
Yii中表单用法实例详解
Jan 05 PHP
PHP中使用foreach()遍历二维数组的简单实例
Jun 13 PHP
php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法
Oct 12 PHP
php修改数组键名的方法示例
Apr 15 PHP
php json转换相关知识(小结)
Dec 21 PHP
thinkPHP+mysql+ajax实现的仿百度一下即时搜索效果详解
Jul 15 PHP
通过PHP实现用户注册后邮箱验证激活
Nov 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 function用法如何递归及return和echo区别
2014/03/07 PHP
php实现随机显示图片方法汇总
2015/05/21 PHP
php实现可运算的验证码
2015/11/10 PHP
PHP数据库操作Helper类完整实例
2016/05/11 PHP
javascript优先加载笔记代码
2008/09/30 Javascript
js 关于=+与+=日期函数使用说明(赋值运算符)
2011/11/15 Javascript
jquery+css3打造一款ajax分页插件(自写)
2014/06/18 Javascript
Node.js 学习笔记之简介、安装及配置
2015/03/03 Javascript
浅谈NodeJS中require路径问题
2015/05/07 NodeJs
JS实现网页标题栏显示当前时间和日期的完整代码
2015/11/02 Javascript
js实现PC端和移动端刮卡效果
2020/03/27 Javascript
详解node nvm进行node多版本管理
2017/10/21 Javascript
详解JavaScript基础知识(JSON、Function对象、原型、引用类型)
2018/01/16 Javascript
vue路由--网站导航功能详解
2019/03/29 Javascript
vue仿淘宝滑动验证码功能(样式模仿)
2019/12/10 Javascript
Selenium执行Javascript脚本参数及返回值过程详解
2020/04/01 Javascript
nodejs+express最简易的连接数据库的方法
2020/12/23 NodeJs
[01:08:00]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python中的ConfigParser模块使用详解
2015/05/04 Python
详解Python中的array数组模块相关使用
2016/07/05 Python
对pycharm 修改程序运行所需内存详解
2018/12/03 Python
基于keras输出中间层结果的2种实现方式
2020/01/24 Python
Python基于DB-API操作MySQL数据库过程解析
2020/04/23 Python
HTML5 canvas基本绘图之绘制阴影效果
2016/06/27 HTML / CSS
西班牙英格列斯百货官网:El Corte Inglés
2016/09/25 全球购物
瑰珀翠美国官网:Crabtree & Evelyn美国
2016/11/29 全球购物
德国药房apodiscounter中文官网:德国排名前三的网上药店
2019/06/03 全球购物
印度民族服装购物网站:BIBA
2019/08/05 全球购物
导游实习生自荐书
2014/01/28 职场文书
施工安全生产承诺书
2014/05/23 职场文书
公司年终奖分配方案
2014/06/16 职场文书
企业财务管理制度范本
2015/08/04 职场文书
七年级生物教学反思
2016/02/20 职场文书
springboot项目以jar包运行的操作方法
2021/06/30 Java/Android
美元符号 $
2022/02/17 杂记
win10键盘驱动怎么修复?Win10键盘驱动修复小技巧
2022/04/06 数码科技