• php学习16-----抽象类,重载,接口技术


        昨天学习了关于对象的继承,今天我们更进一步的学习一下面向对象的相关知识。

    一、抽象类,抽象方法

      1.抽象类

        什么是抽象类?就是一个不能实例化的类;

        定义形式:

          abstract  class  类名{};

        主要作用:为了技术管理而设计的类;

      2.抽象方法

        什么是抽象方法?是一个只有方法头,没有具体方法体的方法定义形式;

        定义形式:

          abstract  function 方法名(形参1,形参2...);

          注意:上面的方法末尾一定有分号;

        主要作用:为了技术管理而设计:要去下级类需要去实现这个方法的“具体做法”;

          

      3.抽象类和抽象方法的细节

        1.一个抽象方法必须在一个抽象类中;

        2.反过来,一个抽象类中可以没有抽象方法---虽然不常见;

        3.抽象方法是为了规定下级类中“必须”要具体去完整某个工作;

        4.下级类中继承了上级的抽象方法,则要么去“实现该方法的具体内容”,要么自己也作为抽象类(即其继承的抽象方法仍然是抽象的);

        5.子类实现父类的抽象方法,其形参也应该跟父类保持一致,其访问权限也不能更小;

    二、重载技术overloading

      1.重载的基本基础

        重载在其他语言中的含义:

          是指在一个类的对象中,有多个名字相同但形参不同的方法的现象;

          类似这样:

            class  C{

              function(){};

              function($p){};

              function($p,$p1,$p2){};

            }

         重载在php中的含义与上面不同 

          在php中是指,在对一个对象或类使用其未定义的属性或者方法的时候,其中一些处理机制;

          比如:

            class  A{

              public $p1 = 1;

            }

            $a = new A();

            echo $a->p1;  //1

            echo $a->p2;  //因为没有这属性,所以会出错。

          而php中的重载技术就是来应对上述出错的情况的,是代码不出差,还能进行优雅处理;

          

      2.属性重载

        就是一个对象的不存在属性进行使用的时候,这个类中预设定好的应对办法(处理机制):

        属性,本质就是变量,只有四个操作:

          取值:当一个对象的不存在属性取值时,就会调用内部的方法__get();

          赋值:当一个对象的不存在的属性进行赋值,就会自动调用内部方法__set();

          判断:当一个对象的不存在属性进行isset()判断时,就会自动调用内部方法:__isset();

          销毁:当一个对象的不存在的属性进行unset()销毁时,就会自动调用内部方法:__unset();

        以上 的四个方法被称作魔术方法

        __get():

          在对一个对象不存在的属性进行取值的时候,会自动调用该方法。

          我们其实可以使用该方法来对这种意外情况进行某种特别处理。

          其中该方法可以带一个形参,表示这个要对之取值的不存在的属性名;

          

          __set($p1,$p2):

            当一个对象 的不存在属性进行赋值的时候,就会自动调用这个内部的魔术方法;它有两个形参,分别代表要对不存在的属性进行赋值时候的“属性名”和“属性值”;

            这个方法和__get()方法一同使用可以是我们的类有一种可扩展性的特性:

          

          __isset();

            当对一个对象的不存在的属性进行isset()判断的时候,就会自动调用内部的方法:__isset();

          

          __unset()

            当一个对象的不存在属性进行unset()销毁操作时,,就会自动调用该内部方法。

          

      3.方法重载

        当对一个对象的不存在的实例方法进行“调用”的时候,会自动调用类中的__call()这个魔术方法;

        当一个对象的不存在的静态方法时,进行“调用”的时候,会自动调用类中__callstatic()这个静态魔术方法;

          

    三、接口(interface)技术

      1.什么是接口

        当一个抽象类中没有任何实质的成员,那么这个抽象类中只有抽象方法,接口就是类似于这种抽象类。

        接口,就是规定,里面只能放“抽象方法”和“常量”的一种类似类的语法结构。

      2.接口(interface)定义形式

        interface 接口名{

          常量1;

          常量2;

          抽象方法1;

          抽象方法2;

        }

        说明:

          接口中,只有常量和抽象方法两种成员;

          接口常量的是由形式为:接口名称::常量名称;

          接口中的抽象方法,不要使用abstract修饰,也不需要使用访问控制修饰符,因为其天然就是public;

          

      3.为什么需要接口

        面向对象编程思想是对“现实世界”的描述;

        现实世界往往都是多继承的,但出于降低类跟类之间复杂关系的复杂度可考虑,就将语言设计为单继承,但这样,就无法表达出现实世界的多继承性;接口就是对没有多继承的类之间关系的一个补充;

        因为:接口可以实现“多继承”---但此时不称为继承,而是称为实现;类1实现了接口1,其本质就是类1中,有了接口1的特征信息。

      4.使用形式

        形式为:

          class  类名  implements  接口名1,接口名2....{}

          

        其实接口跟接口也可以继承:

        interface  接口1  extends  接口2{}

      5.类和接口的大总结

    四、进一步完善msqldb

      1.现有已经完成的功能,做优化处理;

      2.添加更多的功能,要求继续实现如下功能:

        1.用该类的对象可以执行任意的增删改语句,并返回布尔值;

        2.用该类的对象可以执行返回一行数据的“查询语句”:结果是一个一维数组;

        3.用该类的对对象可以执行返回多行数据的“查询语句”:结果是一个二维数组;

        4.用该类的对象可以执行返回一个数据的“查询语句”:结果是一个数据值;

          

    class MySQLDB{
        //设置私有属性,用来存储连接标识符;
        private $link = null;
        //这里设置私有属性,可以存储信息
        private $host;
        private $port;
        private $user;
        private $pass;
        private $charset;
        private $dbname;
        function __construct($config){
            //将这些基本连接信息保存起来;
            //这里给输入信息为空的情况下设置默认值
            $this->host = !empty($config['host'])? $config['host']:"localhost";
            $this->port = !empty($config['port'])? $config['port']:"3306";
            $this->user = !empty($config['user'])? $config['user']:"root";
            $this->pass = !empty($config['pass'])? $config['pass']:"123456";
            $this->charset = !empty($config['charset'])? $config['charset']:"utf8";
            $this->dbname = !empty($config['dbname'])? $config['dbname']:"diyigedb";
    
            //这里开始连接数据库
            $this->link = @mysql_connect("{$this->host}","{$this->user}","{$this->pass}") or die("连接失败");
            //内部执行设置字符编码
            $this->setCharset($this->charset);
            //内部执行选择数据库
            $this->selectDB($this->dbname);
        }
        //设置字符编码
        function setCharset($charset){
            mysql_query("set names $charset");
        }
        //选择数据库名称
        function selectDB($dbname){
            mysql_query("use $dbname");
        }
        //关闭数据库
        function closeDB(){
            mysql_close($this->link);
        }
    
        //这里是执行增删改语句,可以返回布尔值
        function exec($sql){
            $result = mysql_query($sql);
            if($result ===false){
                echo "<p>sql语句执行失败,请参考如下信息:";
                echo "<br>错误代号:".mysql_errno();
                echo "<br>错误信息:".mysql_error();
                echo "<br>错误语句:".$sql;
                die();
            }
            return true;
        }
        //这里执行了一个返回一行数据语句,可以返回一行数据
        function GetOneRow($sql){
            $result = mysql_query($sql);
            //这里判断有没错误,有错误就输出错误信息
            if($result ===false){
                echo "<p>sql语句执行失败,请参考如下信息:";
                echo "<br>错误代号:".mysql_errno();
                echo "<br>错误信息:".mysql_error();
                echo "<br>错误语句:".$sql;
                die();//这里会中断
            }
            //如果没有错误,则从结果集中抓取一行数据
            $rec = mysql_fetch_assoc($result);
            return $rec;
        }
        //这里执行了一个返回多行数据的语句,可以返回二维数组
        function GetRows($sql){
        
        }
        //这里执行了一个返回一个数据的语句,直接返回一个值
        function GetOneData($sql){
        
        }
    }
  • 相关阅读:
    C#飞行棋总结
    用python+pygame写贪吃蛇小游戏
    光线步进——RayMarching入门
    EasyX库进行图片绘制函数
    Unity复杂的旋转-欧拉角和四元数
    MATLAB GUI制作快速入门
    Three.js模型隐藏或显示
    Qt 为QPushButton、QLabel添加鼠标移入移出事件
    Unity c# 状态机的简单入门
    JavaFX Chart设置数值显示
  • 原文地址:https://www.cnblogs.com/pzp-fire/p/5894749.html
Copyright © 2020-2023  润新知