天天看点

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