final 关键字 用fianl定义的类将不能被继承,定义的方法不能被重载php
self 关键字 不须要实例化,直接能够访问当前类中的静态内部成员web
static关键字 定义类成员的静态属性或方法,能够在不实例化的状况使用,单独占用内存,不会由于建立了多个实例化对象而重复占用一样的方法或属性 ide
const关键字 定义类中的常量 等于PHP中的 difine 只能在类中使用this
首先看一个例子spa
- <?
- class Myclass {
- public $name="MT";
- function Myfun(){
- return "我是".$this->name;
- }
- }
- class My extends Myclass{
- function Myfun(){
- return Myclass::Myfun()."第四季第10集";
- }
- }
- $My = new My();
- echo $My->Myfun();
- ?>
输出结果 我是MT第四季第10集对象
若是改动下继承
- <?
- class Myclass {
- public $name="MT";
- final function Myfun(){ //这里的方法用final定义
- return "我是".$this->name;
- }
- }
- class My extends Myclass{
- function Myfun(){
- return Myclass::Myfun()."第四季第10集";
- }
- }
- $My = new My();
- echo $My->Myfun();
- ?>
将会报错 Fatal error: Cannot override final method Myclass::Myfun() in D:\web\bbs\class\class2.php on line 12
内存
这时输入想正常输出只能取消类的集成,直接实例化Myclassstring
- <?
- class Myclass {
- public $name="MT";
- final function Myfun(){ //这里的方法用final定义
- return "我是".$this->name."第四季第10集";
- }
- }
- $Myclass = new Myclass();
- echo $Myclass->Myfun();
- ?>
固然,能够使用self::name来代替$this->name;而且在不实例化的时候能够访问。it
- <?
- class Myclass {
- static $name="MT"; //这里用static定义静态属性
- final function Myfun(){
- return "我是".self::$name."第四季第10集"; //这里用self
- }
- }
- echo Myclass::Myfun();
- ?>
用static定义的成员属性,在使用self::属性名访问时,不会由于实例化中从新定义而改变
- <?
- class Myclass {
- static $name="MT";
- final function Myfun(){ //这里的方法用final定义
- return "我是".self::$name."第四季第10集";
- }
- }
- $Myclass = new Myclass();
- $Myclass->name="小德"; //这里的赋值时不起任何做用的
- echo $Myclass->Myfun();
- ?>
仍是会输出 我是MT第四季第10集
可是若是用$this->成员属性名,就会改变
- <?
- class Myclass {
- static $name="MT";
- final function Myfun(){ //这里的方法用final定义
- return "我是".$this->name."第四季第10集";
- }
- }
- /*class My extends Myclass{
- function Myfun2(){
- return self::Myfun()."第四季第10集";
- }
- }*/
- $Myclass = new Myclass();
- $Myclass->name="小德"; //这里就会起做用
- echo $Myclass->Myfun();
- ?>
使用const能够定义类中的常量
- <?
- class Myclass {
- const NAME="MT";
- final function Myfun(){ //这里的方法用final定义
- return "我是".self::NAME."第四季第10集";
- }
- }
- $Myclass = new Myclass();
- $Myclass->name="小德";
- echo $Myclass->Myfun();
- ?>
仍然会输出 我是MT第四季第10集