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集