• PHP 面向对象 知识点梳理 三


    接口技术

    • PHP支持的是单继承,每次只能从一个父类来继承功能。
    • 如果一个类同时需要多个父类的功能,可以用接口来实现。
    • 接口就是特殊的抽象类。
    • 接口也是子类中方法的命名规范。
    • 有了接口可以很容易的对项目进行功能的扩展。
    • 接口也是一种特殊的类。

    接口定义的实现要点

    • 使用interface关键字来定义接口
    • 使用implements关键字来实现接口
    • 同类的东西才可以继承,类可以继承类,而接口可以继承接口;但是,类只能实现接口
    • 接口中只能定义类常量和抽象方法,其他元素不可能存在。

    • 接口中的方法默认都是抽象方法,但不需要加abstract关键字。

    • 接口中的方法的权限都必须是public。

    • 接口中的方法即可以是成员方法,也可以是静态方法。
    • 接口中的常量在类中不能重写。接口中的常量只能继承。
    • 一个类可以同时实现多个接口。
      接口定义语法
      这里写图片描述
      举个栗子
      这里写图片描述
    <?php
    //声明页面字符集
    header("content-type:text/html;charset=utf-8");
    
    
    //(1)定义电话接口
    interface Tel{
        //打电话的方法
        public function call();
    }
    //(2)定义Mp3接口
    interface Mp3{
        //听音乐的方法
        public function music();
    }
    //(3)定义Mp4接口
    interface Mp4 extends Mp3{
        //看电影的方法
        public function video();
    }
    //(4)定义手机类,并实现所有接口
    class Mobile implements Tel,Mp4{
        //重写打电话的方法
        public function call(){
            echo "正在打电话!<br>";
        }
        //重写听音乐的方法
        public function music(){
            echo "正在听音乐!<br>";
        }
        //重写看电影的方法
        public function video(){
            echo "正在看电影!<br>";
        }
        //打游戏的方法
        public function game(){
            echo "正在玩游戏!";
        }
    }
    //(5)创建手机类的对象
    $obj = new Mobile();
    $obj->call();
    $obj->music();
    $obj->video();
    $obj->game();

    这里写图片描述

    类的自动加载
    1、为什么需要类的自动加载?
    一般情况下,程序员都会把每个类单独定义成一个独立的文件,方便管理。如果在某个文件中,需要用到多个类文件,要在文件的开头,写好多require()语法。
    上面的这种情况,会有一些问题:
    (1)如果把所有类全部加载进来,会占用很多的内存空间;
    (2)如果只需包含需要的类文件,每个页面用到的类文件又不一样,这样一来,每个页面的类文件路径都得修改。
    这里写图片描述
    2、常规的自动加载类函数:__autoload()

    • 该系统函数的名称是固定的:__autoload()
    • 该函数需要我们定义它的内容。
    • 该函数内容就是:构建类文件的真实路径,并类文件的加载。
    • 该函数接收一个唯一的参数,传递过来的类名参数。
    • 该函数何时调用:当使用一个不存在的类时,该函数就会自动调用,并传递类名参数过来。
    • 类的使用只有两种方式:
    • 通过new关键字来创建类的对象。如:$obj = new Student()
    • 通过静态方式下调用类的元素时。如:Student::showInfo()

    3、类文件的命名规则

    • 类的命名规范,使用”驼峰式”命名,每个单词的首字母大写。如:StudentController、Student
    • 方法的命名规范,使用”驼峰式”命名,第1个单词全小写,其余单词首字母大写。如:getError()
    • 类文件的命名规范,类文件主名要与类名一致,类文件后缀必须是”.class.php” 。纯类文件。
    • 例如:StudentController.class.php、NewsModel.class.php
      4 举例说明
      这里写图片描述
      这里写图片描述

    自定义类文件加载函数(spl_autoload_register)

    1、描述
    如果类文件位于不同的目录,且命名方式不尽相同时,使用传统的__autoload()加载函数,就会显得十分麻烦,因为要做很多的文件是否存在的判断。复杂的类文件加载请使用spl_autoload_register()函数。
    提示:传统的类文件加载函数__autoload()在最新的PHP版本中将被去掉。
    2、语法格式
    这里写图片描述
    3、类的自动加载演示
    提示:Student.class.php位于./libs/目录;Teacher.class.php位于./public/目录中。

    这里写图片描述
    4、使用匿名函数作参数
    这里写图片描述

    对象遍历
    使用foreach可以遍历数组,也可以对象属性。
    如果在类外遍历对象时,只能遍历public权限的属性。
    如果在类内遍历对象时,所有对象属性都可以遍历出来。
    这里写图片描述

    魔术方法

    对象克隆
    1、什么是对象克隆
    - 如果我们想创建新的对象,有哪些方法?通过new关键字创建新对象,通过clone关键字创建新对象。
    - obj2=obj1它是创建新对象吗?它们是同一个对象的不同变量。它们不是两个独立的对象。
    这里写图片描述
    2、clone关键字的使用
    这里写图片描述
    3、__clone()克隆的魔术方法
    魔术方法就是类中特殊的方法,这些魔术方法的名称是固定的,不能修改的。
    魔术方法都是自动调用。如:__construct()、__destruct()、__clone()
    当对象克隆完成时,__clone()克隆方法会自动调用。
    魔术方法都是成员方法,魔术方法一般都是public权限。
    这里写图片描述
    1、__toString()
    描述:当把一个对象转成字符串时,该魔术方法会自动调用。
    语法:public string __toString ( void )
    这里写图片描述
    2、__invoke()
    描述:当把对象当成函数调用时,该魔术方法会自动调用。
    语法:mixed __invoke ([ $… ] )
    这里写图片描述

    5、instanceof关键字
    描述:判断当前对象是不是某个类的对象。如果是某个类的对象,则返回TRUE;否则,返回FALSE。
    语法:$obj instanceof ClassName

  • 相关阅读:
    kali linux 换国内源
    虚拟机桥接网络上网
    excel 无效引用 所引用的单元格不能位于256列
    sublime python配置运行
    java 环境变量配置(win10)
    Python错误:AssertionError: group argument must be None for now
    python if not
    ubuntu 安装mysql
    python 利用jieba库词频统计
    zxy的猪错误
  • 原文地址:https://www.cnblogs.com/liuqun/p/12655224.html
Copyright © 2020-2023  润新知