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

原文地址:https://www.cnblogs.com/liuqun/p/12655224.html