美文网首页
PHP中的trait,interface和abstract

PHP中的trait,interface和abstract

作者: 回眸淡然笑 | 来源:发表于2018-01-31 16:44 被阅读0次

    trait看上去更像是为了代码的复用而写的一个小插件,它类似于include,可以用use放在类中间,让trait里面定义的方法作为class的一部分,本身不能直接实例化。

    interface里面的方法都是虚拟的,需要在继承的时候对这些方法进行重定义。也就是说,方法是说明性质的,并没有实际操作,而你在继承的时候,需要实现这些方法,不然就会出错,而且不能缺失。interface经常用于架构的时候,对一个实例所拥有的属性和方法进行抽象定义。简单来讲类似一个协议,是老板下达的任务。你要继承的话,必须满足这个协议,也就是完成老板下达的任务。

    abstract:当abstract作用于某个类时,此类被限定为抽象类,只能用于继承,而无法实例化对象。抽象类不一定含有抽象方法,但抽象方法一定存在于抽象类中,且继承此抽象类的子类必须全部实现其抽象方法,否则,子类也要标识为抽象类。抽象方法是必须被子类继承实现的,所以不可以用private修饰符去限定abstract抽象方法,可以用public和protected去修饰。

    interface

    定义了一个接口类,它里面的方法其子类必须实现。接口是类的一个模板,其子类必须实现接口中定义的所有方法。

    interface User{
    
        function getHeight($height);
    
        function getWeight($weight); 
    
    }
    
    class my implements User{
    
        function getHeight($username){
    
            echo $height;
    
        }
    
        function getWeight($weight){
    
            echo $weight;
    
        }
    
    }
    

    abstract

    抽象类就把类像的部分抽出来,就是把重复的东西写到抽象类中,减少工作量。只要方法没有用abstract声明,在其子类中就不用实现。而且在子类中该方法为公共方法。

    abstract User{
    
        abstract function getHeight($height);
    
        function getWeight(){
    
            echo $weight;
    
        }
    
    }
    
    class my extends User{
    
        function getHeight($height){
    
             echo $height;
    
        }
    
        function getInfoById($id){
    
            $this->getWeight.“<br/>”;
    
            echo $id;
    
        }
    
    }
    

    相关文章

      网友评论

          本文标题:PHP中的trait,interface和abstract

          本文链接:https://www.haomeiwen.com/subject/qrllzxtx.html