• 构造、析构;重写;设计模式;单例;抽象;重载


    造方法析构方法在继承中的表现:

    如果子类中没有构造方法的时候,自动调用父类的构造方法,实例化子类的时候,需要根据父类的构造方法来写

    代码演示:

    子类如果有构造方法,则不能调用父类的构造方法,如果要调用可以选则以下形式:

    parent::__construct();注意:两个下划线

     

    通常为了节省代码,或者增加可读性,一般都是调用父类的构造方法

    重写override

    重写是用在继承里面的,调用父类方法时,子类的方法名和参数名相同。

    class jizhuianimal{
    
    public $li1 = "有脊椎动物";
    
    function show1(){
    
    echo "<br />特征:".$this->lei1;
    
    }
    
     
    
    }
    
    class human extends jizhuianimal{
    
    public $li1 ="具有28节脊椎";
    
    public $li2 ="有32颗牙齿";
    
     
    
    function show2(){
    
    echo "<br/>我是人类,特征有:".$this->li1;
    
    parent::show1();
    
    echo "<br />".$this->li2;
    
    }
    
    }
    
     
    
    $hum1=new human();
    
    $hum1->show2();
    代码练习

    注意:如果父类的方法不适合子类,则需要子类完全由自己写

    重写的基本要求:

    访问控制权限:

    不能跃级访问

    上级:public 下级同样是public

    上级:protected 下级可以是protectedpublic

    上级:private 下级都可以(私有的不能覆盖,是全新的创建)

    最终类final class

    如果一种类不想再扩展了,那么就可以用最终类来表示

    表达形式:

    final  class  类名{ 。。。。类定义。。。。}

    最终方法final method

    如果一个方法不想被下级覆盖,那么可以将这类方法写为最终方法

    表达形式:

    final  function  方法名(){。。。。方法定义。。。。}

    设计模式

    设定一些常用的解决方法,来减少工作量和代码量

    工厂模式:

    相当于现实生活中的加工厂,这个加工厂可以加工出想要的对象,只要指定一个类名,就可以获取该类的对象

    代码演示:

    class factory{
    
    //Instance表示“实例”,“对象”
    
    static function getInstance($className){
    
    if(file_exists('./class/' . $className . ".class.php")){
    
    $obj1 = new $className();
    
    return $obj1;
    
    }
    
    else{
    
    return null;//也可以die();
    
    }
    
    }
    
    }
    
    $obj1 = factory::getInstance("A");//获取类A的一个对象
    
    $obj2 = factory::getInstance("B");//获取类B的一个对象
    
    $obj3 = factory::getInstance("A");//再获取类A的一个对象

    单例模式:

    这种模式一个类中只能创建一个对象,也只能获得一个对象

    单例:

    1、私有属性(值是对象)

    2、私有构造方法(不能new

    3、提供获取对象的方法(这里面判断是否存在)

    4、私有克隆

    代码演练:

    //实现一个单例类:其只能获得一个对象
    
    class B{
    
    public $v1 = 10;
    
     
    
    private static $instance;
    
     
    
    private function __construct(){}
    
    public static function getNew(){
    
    //如果本类中的$instance还没有数据
    
    if( !isset(B::$instance) ){
    
    B::$instance = new self;
    
    }
    
    return B::$instance;
    
    }
    
    private function __clone(){}
    
    }
    
    //$o1 = new B();//出错,因为构造方法私有了,
    
    $o1 = B::getNew();
    
    $o1->v1 = 100; //修改
    
    $o2 = B::getNew();
    
    var_dump($o1);
    
    echo "<br />";
    
    var_dump($o2);
    
    $o3 = clone $o1; //克隆对象
    
    echo "<br />";
    
    var_dump($o3);
    
    $o1->v1 = 123;
    
    echo "<br />o1中的v1为:" . $o1->v1;
    
    echo "<br />o2中的v1为:" . $o2->v1;
    
    echo "<br />o3中的v1为:" . $o3->v1;
    代码演练

    $link = mysql_connect(“localhost”, “root”, “123”); //得到一个“连接到mysql数据库”的资源。

    $result = mysql_query(select .....”); //这个是结果集资源

    抽象类,抽象方法

    抽象类:

    关键字:abstract

    表达形式:abstract  class  类名{.....类的定义.....} 

    抽象类又是“父类”,子类继承它的特性就是规范(不可实例化,也就是没有对象)

    抽象方法:

    抽象方法是一个简单的描述,没有大括号,也没有方法体

    例如:abstract  function  f1($x1, $y, $m)

    抽象方法里只能写抽象类,要求下级类去完成工作

    子类要继承父类的所有抽象方法,除非子类也是抽象类

    PHP中的重载技术

    同名不同参的方法(类型,数量)称为重载

    例如:

    class  A{

    int  function  f1(int  x){......}

    int  function  f1(int  x,  int  y){.....}

    int  function  f1(string s   int  m){....}

    }

    属性重载:如果使用不存在的属性,则会自动调用父类预定义好的方法来处理。

    适用的情形对应相应的解决方法:

    取值:$v1 = 对象->属性; ===>自动调用类中的__get()方法

    赋值:对象->属性 = XX值; ===>自动调用类中的__set()方法

    判断是否存在:isset(对象->属性;) ===>自动调用类中的__isset()方法

    销毁:unset(对象->属性;) ===>自动调用类中的__unset()方法

    方法重载:如果使用不存在的方法,则会自动调用父类预定义好的__call方法(必须带两个参数)来处理此行为。

    “魔术方法”:

    __get(), __set(),  __isset(), __unset(),  __call(),  __callstatic();

  • 相关阅读:
    SUM游戏
    指针入门(四)
    MSP430 G2553 寄存器列表与引脚功能
    MSP430G2553头文件解析
    修复Kaos的中文显示
    VIM使用技巧3
    VIM使用技巧2
    Java学习之路(3)
    指针入门(三)
    共享VIM配置文件
  • 原文地址:https://www.cnblogs.com/sc1314-1218/p/8515145.html
Copyright © 2020-2023  润新知