天天看點

abstract,final,const,self,static關鍵字的使用

<!--
*fianl  self  static const
*fianl 當定義類的時候該類不能被繼承,當定義方法方法不能被重載,
*文法:
*   fianl class class_name{   //定義這個類不能被繼承
*       fianl function fun_name(){
*               echo '如果在方法的加上fianl了關鍵字将不能被重載';
*           }
*       }
*
*static 用來定義類的靜态屬性或方法,可以在類未被執行個體化時使用,靜态屬性的單獨占用記憶體而不會因建立多個對象是而導緻同樣的方法或者屬性重複占用。
*文法:  class class_name{
*       static  $name;              //設定靜态成員
*       static  function fun1(){        //設定靜态方法
*       .....//值得注意的是,靜态方法内部禁止出現非靜态内容,也就是說靜态方法中隻能夠出現靜态内容
*       }  
*   }
*
*self 用來通路目前類中内容的關鍵字,類似與$this 關鍵字,但$this 是需要類執行個體化以後才能夠使用的 而 self 可以直接通路目前類中的内部成員,但是需要注意的是,沒有執行個體化類通路内部屬性或者是方法都是沒有意義的,是以,self 一般是用來通路類中的:靜态成員,常量,或者其他定義的内容
*文法: self :: 類内部成員或屬性。其實和  類名 :: 類内部成員或是屬性 是相等的。
* 如果我們通路上面定義的類中的靜态成員和方法,我們可以這樣
*   class class_name{
*       static $name ;
*       static function fun1(){
*           self::$name;    //使用self通路目前檔案不需執行個體化即可通路。
*           self::fun1;
*       }
*   }
*
*conts  用來定義類中的常量,類似php 外部定義的常量的關鍵字define(); conts隻能修飾類當中的成員屬性
*   class class_name{
*       conts NAME;     //建議大寫常量名  ,常量不要用到$ 符号
*       function fun(){
*       .......
*           }
*   }
*
*
-->
<?php
    abstract class fun1{        //定義fun1 為抽象類,使用abstract  關鍵字定義。
        abstract function fun_1();  //在抽象類中,至少要有一個抽象方法,在定義一般方法的基礎上加abstract 關鍵字進行定義;
        abstract function fun_2(); 
        abstract function fun_3();
        abstract function fun_4();
        function fun_5(){
        }           //雖然是抽象類,但是裡面還是可以擁有一般方法的,
    }
    class fun2 extends fun1{    //ok 這裡定義一個類,繼承上面定義的抽象類fun1 并且必須加将抽象類的各個抽象方法進行重載。必須各個用到
        function fun_1(){   //将抽象方法一一重載
            echo 'fun1';
        }
        function fun_2(){
            echo 'fun2';
        }
        function fun_3(){
            echo "fun_3";
        }
        function fun_4(){
            echo "fun_4";
        }
    }
    class fun3{             //這裡示範一個定義常量的類
        const NAME='PC100';  //使用const 關鍵字定義常量。
        public $name="pc100aaa0";
        function self(){    //定義一個方法,示範self 關鍵字的使用
            echo self::NAME;    //self 關鍵字可以直接不用經過執行個體化類讀取類的資訊
        }
    }  
    echo fun3::NAME;        //沒有執行個體化将常量列印出來
    fun3::self();           //用類名來調用方法。
    //fun3::name;               //同樣的方法調用變量卻被提示錯誤
      
    $conts=new fun3();      //執行個體化輸出
    $conts->self();
      
      
    $p=new fun2();      //将繼承抽象類的fun2 類進行執行個體化。
    $p->fun_1(); //輸出fun2中的fun_1方法
      
    final class fun4{           //用了final關鍵字定義的類不能被繼承。
        const NAME='This is a constant';
        public $var='這個類不能被繼承';
        final function fun4(){      //用了final 關鍵字定義的方法不能被重載
            echo $var;
        }
    }
    echo fun4::NAME;
    $fun4=new fun4();
      
?>
           

轉載于:https://blog.51cto.com/kinpui/1367716

php