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学习之正则表达式
Apr 17 PHP
php在window iis的莫名问题的测试方法
May 14 PHP
PHP 获取远程文件大小的3种解决方法
Jul 11 PHP
用PHP实现弹出消息提示框的两种方法
Dec 17 PHP
ThinkPHP连接数据库及主从数据库的设置教程
Aug 22 PHP
php实现window平台的checkdnsrr函数
May 27 PHP
整理php防注入和XSS攻击通用过滤
Sep 13 PHP
PHP判断字符串长度的两种方法很实用
Sep 22 PHP
Smarty模板常见的简单应用分析
Nov 15 PHP
PHP7多线程搭建教程
Apr 21 PHP
thinkphp5 URL和路由的功能详解与实例
Dec 26 PHP
php如何获取Http请求
Apr 30 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 在windows下配置虚拟目录的方法介绍
2013/06/26 PHP
详解Window7 下开发php扩展
2015/12/31 PHP
PHP怎样用正则抓取页面中的网址
2016/08/09 PHP
thinkPHP多表查询及分页功能实现方法示例
2017/07/03 PHP
PHP实现的redis主从数据库状态检测功能示例
2017/07/20 PHP
PHP中ltrim()函数的用法与实例讲解
2019/03/28 PHP
FireFox下XML对象转化成字符串的解决方法
2011/12/09 Javascript
Jquery实现网页跳转或用命令打开指定网页的解决方法
2013/07/09 Javascript
JavaScript实现SHA-1加密算法的方法
2015/03/11 Javascript
函数window.open实现关闭所有的子窗口
2015/08/03 Javascript
JS获取html元素的标记名实现方法
2016/10/08 Javascript
深入了解JavaScript的逻辑运算符(与、或)
2016/12/20 Javascript
深入理解vue2.0路由如何配置问题
2017/07/18 Javascript
Windows下Node.js安装及环境配置方法
2017/09/18 Javascript
vue底部加载更多的实例代码
2018/06/29 Javascript
react实现换肤功能的示例代码
2018/08/14 Javascript
快速解决Vue项目在IE浏览器中显示空白的问题
2018/09/04 Javascript
微信小程序 如何保持登录状态
2019/08/16 Javascript
[06:53]DOTA2每周TOP10 精彩击杀集锦vol.3
2014/06/25 DOTA
python实现列表的排序方法分享
2019/07/01 Python
WxPython实现无边框界面
2019/11/18 Python
Jupyter Notebook打开任意文件夹操作
2020/04/14 Python
python 如何用urllib与服务端交互(发送和接收数据)
2021/03/04 Python
浅析几个CSS3常用功能的写法
2014/06/05 HTML / CSS
Html5插件教程之添加浏览器放大镜效果的商品橱窗
2016/01/07 HTML / CSS
纽约21世纪百货官网:Century 21
2016/08/27 全球购物
车间调度岗位职责
2013/11/30 职场文书
生产车间主管岗位职责
2013/12/28 职场文书
校运动会广播稿300字
2014/10/07 职场文书
高考作弊检讨书1500字
2015/02/16 职场文书
水知道答案观后感
2015/06/08 职场文书
2016年119消防宣传日活动总结
2016/04/05 职场文书
中秋节英文祝福语句(14句)
2019/09/11 职场文书
Spring Boot项目传参校验的最佳实践指南
2022/04/05 Java/Android
JavaScript获取URL参数的方法分享
2022/04/07 Javascript
美国运营商 T-Mobile 以 117.83Mb/s 的速度排第一位
2022/04/21 数码科技