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中使用$_REQUEST需要注意的一个问题
May 02 PHP
360通用php防护代码(使用操作详解)
Jun 18 PHP
使用php 获取时间今天明天昨天时间戳的详解
Jun 20 PHP
php冒泡排序、快速排序、快速查找、二维数组去重实例分享
Apr 24 PHP
PHP内存缓存Memcached类实例
Dec 08 PHP
php实现过滤字符串中的中文和数字实例
Jul 29 PHP
PHP实现微信发红包程序
Aug 24 PHP
php通过两层过滤获取留言内容的方法
Jul 11 PHP
PHP里面把16进制的图片数据显示在html的img标签上(实现方法)
May 02 PHP
PHP递归实现汉诺塔问题的方法示例
Nov 25 PHP
Thinkphp 5.0实现微信企业付款到零钱
Sep 30 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利用腾讯ip分享计划获取地理位置示例分享
2014/01/20 PHP
详解PHP+AJAX无刷新分页实现方法
2015/11/03 PHP
PHP获取网站中各文章的第一张图片的代码示例
2016/05/20 PHP
JavaScript窗口功能指南之在窗口中书写内容
2006/07/21 Javascript
JSON 学习之完全手册 图文
2007/05/29 Javascript
javascript阻止浏览器后退事件防止误操作清空表单
2013/11/22 Javascript
jquery+css3实现网页背景花瓣随机飘落特效
2015/08/17 Javascript
jquery+html5烂漫爱心表白动画代码分享
2015/08/24 Javascript
基于Turn.js 实现翻书效果实例解析
2016/06/20 Javascript
Bootstrap登陆注册页面开发教程
2016/07/12 Javascript
详解Javascript中prototype属性(推荐)
2016/09/03 Javascript
简单实现jQuery多选框功能
2017/01/09 Javascript
值得分享和收藏的xmlplus组件学习教程
2017/05/05 Javascript
Vue修改mint-ui默认样式的方法
2018/02/03 Javascript
jQuery实现获取动态添加的标签对象示例
2018/06/28 jQuery
vue devtools的安装与使用教程
2018/08/08 Javascript
spring+angular实现导出excel的实现代码
2019/02/27 Javascript
js尾调用优化的实现
2019/05/23 Javascript
Nuxt使用Vuex的方法示例
2019/09/06 Javascript
typescript编写微信小程序创建项目的方法
2021/01/29 Javascript
详解微信小程序轨迹回放实现及遇到的坑
2021/02/02 Javascript
Python循环语句中else的用法总结
2016/09/11 Python
python抓取网站的图片并下载到本地的方法
2018/05/22 Python
python tornado修改log输出方式
2019/11/18 Python
Python要如何实现列表排序的几种方法
2020/02/21 Python
python实现逢七拍腿小游戏的思路详解
2020/05/26 Python
Python虚拟环境的创建和使用详解
2020/09/07 Python
贝玲妃英国官网:Benefit英国
2018/02/03 全球购物
生产部统计员岗位职责
2014/01/05 职场文书
三分钟演讲稿事例
2014/03/03 职场文书
实用的简历自我评价
2014/03/06 职场文书
2014年政风行风自查自纠报告
2014/10/21 职场文书
项目负责人岗位职责
2015/02/15 职场文书
2015年幼儿园后勤工作总结
2015/04/25 职场文书
Python中threading库实现线程锁与释放锁
2021/05/17 Python
Spring-cloud Config Server的3种配置方式
2021/09/25 Java/Android