PHP之类补充

来源:互联网 发布:ubuntu安装xwindow 编辑:程序博客网 时间:2024/06/10 20:13

最终类与最终方法

如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。

final class a{}class a{    final public function A(){}}

抽象类与抽象方法

abstract class a {    public abstract function func();}class A extends a{    public function func(){}}
  • 一个类可以使用abstract声明为抽象类;抽象类是不能实例化的类,只用作其他类的父类。
    abstract class name{}
  • 一个方法可以使用abstract声明为抽象方法;抽象方法只需要声明方法头,不需要大括号部分的方法体。
    abstract public function name($val);
  • 一个类中有抽象方法,则该类必须声明为抽象类。
  • 子类继承自一个抽象类,则子类不行实现父类中的所有抽象方法,除非子类也继续作为抽象类。
  • 子类实现抽象父类的方法时,访问控制符范围不能降低,且方法的参数也必须一致(重写)。

接口

接口可以看作是抽象类的更高层面的抽象,可以说是抽象类的特例

interface a{    function func();}class A implements a {    function func(){}}

类:属性、类常量、方法
抽象类:属性、类常量、抽象方法
接口:接口常量、抽象方法


  • 相比抽象类,接口可实现’多继承‘

    class A implements a,b,c{}

  • 一个接口只能继承一个接口

    interface a extends b{}

  • 其中方法都是抽象方法不用abstract修饰,即下级类要么实现接口的方法(implements),要么也声明为抽象方法

重载技术

  1. 属性重载:如果使用一个不存在的属性,就会调用类中预先定义好的某个方法以处理数据;

对于属性不用的应用场景,做如下处理

  • 取值:自动调用类中的__get()
  • 赋值:自动调用类中的__set()
  • 判断是否存在:自动调用类中的__isset()
  • 销毁:自动调用类中的__unset()
  • 前提是预先定义好这些方法,否则会报错
<?phpclass bee{    public $ol = array();    public function __get($key){        if(isset($this->ol[$key])){            return $this->ol[$key];        }        return $key.' not exists';    }    public function __set($key,$val){        $this->ol[$key] = $val;    }    public function __isset($key){        if(isset($this->ol[$key])){            return true;        }        return false;    }    public function __unset($key){        unset($this->ol[$key]);    }}$obj = new bee();echo $obj->one;echo '<br>';$obj->one = 1;echo $obj->one;echo '<br>';var_dump(isset($obj->one));

方法重载:如果使用一个不存在的方法,就会调用类中预先定义好的某个方法以处理该行为;

对于方法不用的应用场景,做如下处理

  • 在对象中调用不可访问的方法:__call()
  • 静态方式中调用不可访问方法:__callStatic()
<?phpclass bee{    public function __call($name,$arr){        echo '<br>';        echo 'function '.$name.' not exist';    }    static function __callStatic($name,$arr){        echo '<br>';        echo 'function '.$name.' not exist';    }    /*public function __call($name,$arr){        $num = count($arr);        if($num<1){            $name();        }else{            $name = $name.'_one';            $name($arr[0]);        }    }*/}$obj->func();bee::staFunc();/*$obj->func(1);function func(){    echo '<br>';    echo 'no.0';}function func_one($val){    echo '<br>';    echo 'no.'.$val;}*/


注意:以上方法都属于魔术方法,都带有参数

0 0
原创粉丝点击