在PHP5中新增加了final关键字,它可以加载类或类中方法前。但不能使用final标识成员属性,虽然final有常量的意思,但在php中定义常量是使用define()函数来完成的。

 final关键字的作用如下:

  使用final标识的类,不能被继承。

  在类中使用final标识的成员方法,在子类中不能被覆盖。

例子如下:

<?php
final class myclass{
} class myclass2 extends myclass{
}
该程序运行后输出的结果为:
Fatal error:Class MyClass2 may not inherit from final class(myclass) //输出错误

  

<?php
class myclass{
final function fun(){
}
}
class myclass2 extends myclass{
function fun(){
}
}
该程序运行后输出的结果为:
Fatal error:Cannot override final method myclass::fun //系统报错

 statci关键字:

  使用static关键字可以将类中的成员标识为静态的,既可以用来标识成员属性,也可以用来标识成员方法。普通成员作为对象属性存在,以person类为例,如果在person类中有一个"$country='china'"的成员属性,任何一个person类的对象都会拥有自己的一份$country属性,对象之间不会干扰。而static成员是作为整个类的属性存在,如果将$country属性使用static关键字标识,则不管通过person类创建多少个对象(甚至可以是没有对象),这个static成员总是唯一存在的,在多个对象之间共享的。因为使用static标识的成员是属于类的,所以与对象实例和其他的类无关。类的静态属相非常类型于函数的全局变量。类中的静态成员是不需要对象而使用类名来直接访问的,格式如下:

类名::静态成员属性名; //在类的外部和成员方法中都可以使用这种方式方位静态成员属性
类名::静态成员方法名(); //在类的外部和成员方法中都可以使用这种方式方位静态成员方法

  在类中声明的成员方法中,也可以使用关键字“self”来访问其他静态成员。因为静态成员是属于类的,而不是属于任何对象,所以你不能用$this来引用它

self::静态成员属性名;   //在类的成员方法中使用这种方式访问本类中的静态成员属性
self::静态成员访问名(); //在类的成员方法中使用这种方式访问本类中的静态成员方法

  static应用例子:

<?php
class myclass{
static $count; function__construct(){ //每次创建一个对象就会自动调用一次这个构造方法
self::$count++;
}
static function getcount(){
return self::$count:
}
}
myclass::$count=0; //在类外面使用类名方位类中的静态成员,为其初始赋值0
$myc1=new myclass(); //通过myclass类创建第一个对象,在构造方法中将count累加1
$myc2=new myclass(); //通过myclass类创建第二个对象,在构造方法中又为count累加1
$myc3=new myclass(); //通过myclass类创建第三个对象,在构造方法中再次为count累加1 echo myclass::getcount(); //在类外面使用类名访问类中的静态成员方法,获取静态属性的值3
echo $myc3->getcount(); //通过对象也可以访问类中的静态成员方法,获取静态属性的值3

  const关键字:

  在php中定义常量是通过调用define()函数来完成的,但要将类中的成员属性定义为常量,则只能使用const关键字。

  使用const标识为常量的成员属性,都是通过类名或在成员方法中self关键字访问,也不能用对象来访问。

  标识为常量的属性是只读的,不能重新赋值,如果在程序中试图改变它的值,则会出现错误。所以在声明常量时一定要给初值,因为没有其他方式后期为常量赋值。

  使用const声明的常量名称不要使用"$"符号,而且常量名称通常都是大写的。

<?php
class myclass{
const CONSTANT='CONSTANT value';
function showconstant(){
echo self::CONSTANT."<br>" //使用self访问常量,注意常量前不要加“$”;
}
} echo myclass::CONSTANT."<br>"; //在类外部使用类名称访问常量,也不要加“$”
$class=new myclass(); //通过类myclass创建一个对象引用$class
$class->showconstant(); //调用对象中的方法
//echo $class::CONSTANT; //通过对象名称访问常量时不允许的

  

  

 

 

PHP的final关键字、static关键字、const关键字的更多相关文章

  1. C++ —— 类中static和const关键字声明变量的初始化方式总结

    在类中声明变量/常量时,经常会用到static.const关键字.对于该变/常量的初始化问题,网上有许多相关文章,但是大多不够完善,或者存在错误.经过实际验证,总结如下: (注明:测试编译平台为VS2 ...

  2. PHP 面向对象中常见关键字使用(final、static、const和instanceof)

    PHP 面向对象中常见关键字的使用: 1.final :final关键字可以加在类或者类中方法之前,但是不能使用final标识成员属性. 作用: 使用final标识的类,不能被继承. 在类中使用fin ...

  3. C语言之头文件,static与const关键字

    [前言] 最近几个月在做一个C语言代码重构的项目,过程中也让我对之前在书本上学习到的东西有些补充和巩固,在本博中总结记录下,梳理下零碎的知识点和经验也加深印象,书写是为了更好地思考.平时也都是用印象笔 ...

  4. static和const关键字的作用

    static关键字至少有下列n个作用: (1)函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值: (2)在模块内的stat ...

  5. 使用static与const关键字时需要掌握的知识

    static:1.不考虑类,static的作用:    1)第一个作用:隐藏.使得全局变量和函数对其它文件不可见,同时避免了不同文件的命名冲突.    2)第二个作用:默认初始化为0.未初始化的全局静 ...

  6. C++中static和const关键字的作用

    static关键字至少有下列几个作用: 函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值: 在模块内的static全局变量 ...

  7. 2019-07-23 static 和 const 关键字的应用

    首先先来了解下内存段,内存段共分为四个,栈.堆.代码段.初始化静态段.程序中不同的声明存放在不同的内存段内,栈空间段是存储占用相同空间长度并且占用空间小的数据类型的地方,比如说整型1, 10, 100 ...

  8. 【PHP面向对象(OOP)编程入门教程】15.static和const关键字的使用(self::)

    static关键字是在类中描述成员属性和成员方法是静态的:静态的成员好处在哪里呢?前面我们声明了“Person”的人类,在“Person”这个类里如果我们加上一个“人所属国家”的属性,这样用“Pers ...

  9. C语言中Static和Const关键字的的作用

    程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中. 1.作用于变量: 用static声明局部变量-------局部变量指在代码块{}内部定义的变量,只在代码块 ...

  10. static和const关键字

    C#与C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static.前者应用于普通变量和函数,不涉及类   面向过程 静态全局变量 静态全局变量在声明它的整个文件 ...

随机推荐

  1. 在View and Data API中更改指定元素的颜色

    大家在使用View and Data API开发过程中,经常会用到的就是改变某些元素的颜色已区别显示.比如根据某些属性做不同颜色的专题显示,或者用不同颜色表示施工进度,或者只是简单的以颜色变化来提醒用 ...

  2. VS2012 Unit Test——Microsoft Fakes入门

    如题,本文主要作为在VS2012使用Fakes的入门示例,开发工具必须是VS2012或更高版本. 关于Fakes的MSDN地址:http://msdn.microsoft.com/en-us/libr ...

  3. IT菜鸟的生存指南(三)流行还是经典

    经常被刚入行的新人请教,想学一门开发语言,最好又简单工资又高又有发展前途.那门语言最好这个话题能在程序员群里吵一下午,所以我也就不掀起战争了. 个人建议如下: 工资高不高不在于学那门语言,而在于你的行 ...

  4. LintCode389.判断数独是否合法

    LintCode简单题:判断数独是否合法 问题描述: 请判定一个数独是否有效. 该数独可能只填充了部分数字,其中缺少的数字用 . 表示. 注意事项: 一个合法的数独(仅部分填充)并不一定是可解的.我们 ...

  5. [Erlang 0118] Erlang 杂记 V

       我在知乎回答问题不多,这个问题: "对你职业生涯帮助最大的习惯是什么?它是如何帮助你的?",我还是主动回答了一下.    做笔记 一开始笔记软件做的不好的时候就发邮件给自己, ...

  6. SQL Server 2014新特性:其他

    AlwaysOn 增强功能 SQL Server 2014 包含针对 AlwaysOn 故障转移群集实例和 AlwaysOn 可用性组的以下增强功能: “添加 Azure 副本向导”简化了用于 Alw ...

  7. java中 String StringBuffer StringBuilder的区别

    * String类是不可变类,只要对String进行修改,都会导致新的对象生成. * StringBuffer和StringBuilder都是可变类,任何对字符串的改变都不会产生新的对象. 在实际使用 ...

  8. Spring、hibernate以及struts2三大框架的整合

    1.首先导入整合框架所需要的43个jar包: 2.配置xml文件: <?xml version="1.0" encoding="UTF-8"?> & ...

  9. Oracle索引梳理系列(十)- 直方图使用技巧及analyze table操作对直方图统计的影响(谨慎使用)

    版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...

  10. transient关键字的作用

    代码如下: import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutpu ...