接口里面的方法都是没有实现的,而类里面的方法都是有实现的. 有没有一种形态,允许类里面一部分方法不实现呢?
当接口中的某些方法对于所有的实现类都是一样的实现方法,只有部分方法需要用到多态的特性
如人和动物吃东西是不同的,但是呼吸是相同的,不需要为人和动物分别实现呼吸的功能
abstract关键字用于定义抽象类
在抽象方法前面添加abstract关键字可以标明这个方法是抽象方法不需要具体实现{}
抽象类中可以包含普通的方法,有方法的具体实现
继承抽象类的关键字是extends
继承抽象类的子类需要实现抽象类中定义的抽象方法
抽象类不能被实例化,当子类继承抽象类的时候,所有的抽象的方法都必须定义
定义子类 继承 抽象类,如果子类没有全部实现抽象类的方法,那子类也要在前面使用abstract 定义抽象子类
抽象类可以被多个子类继承,实现抽象类里面的方法,方法一样但是方法实现起来的内容可以不同
接口就是把不同类的共同行为进行定义,然后在不同的类里面实22现不同的功能
interface定义接口,implements用于表示类实现某个接口
接口里面的方法没有具体的实现,无{}
实现了某个接口的类必须提供接口中定义的方法的具体实现
不能实例化接口,但是能够判断某个对象是否实现了某个接口。instanceof关键字判断某个对象是否实现了某个接口 $object instanceof interface
接口可以继承接口(interface extends interface)
接口中定义的所有方法都必须是公有,这是接口的特性
因为接口的方法实现可以有很多,所以对于接口里面定义的方法的具体实现是多种多样的,这种特性我们称为多态
不需要知道对象属于哪个类,只要判断该对象的类是否实现接口,就能实现调用,相同代码实现不同结果
形象点说就是同一个接口,不同的对象实现,得出的结果不一样就是多态,如传入的是人类对象,得到的是人类吃苹果,传入的是猴子对象,得到的就是猴子吃香蕉。相同的一行代码,对于传入不同的接口的实现的对象的时候,表现是不同的。
>
证明this 可以动态化地与调用对象进行绑定
self 始终永远和当前类进行绑定
self 在静态继承上下文中, 不能动态的识别或者设置静态成员的调用者(单例继承)
证明self不能动态化的与调用对象进行绑定
后期静态绑定static可以动态化对调用者进行绑定
PHP语言是一种解释型的脚本语言,这种运行机制使得每个PHP页面被解释执行后,所有的相关资源都会被回收。也就是说,PHP在语言级别上没有办法让某个对象常驻内存,这和asp.net、Java等编译型是不同的,比如在Java中单例会一直存在于整个应用程序的生命周期里,变量是跨页面级的,真正可以做到这个实例在应用程序生命周期中的唯一性。然而在PHP中,所有的变量无论是全局变量还是类的静态成员,都是页面级的,每次页面被执行时,都会重新建立新的对象,都会在页面执行完毕后被清空,这样似乎PHP单例模式就没有什么意义了
PHP单例模式只是针对单次页面级请求时,出现多个应用场景并需要共享同一对象资源时是非常有意义的。
面向对象编程三大特性:
封装 可见性 php中使用3种类型的可见性 : private(私有), protected(保护),public(公共)
封装一个程序元素, 把它设为private,仅在本类中可见,还可以把它设为protected,允许本类及其子类访问该属性; 要访问封装的对象, 必须提供公有的可见性. 想要作为一个真正有用的类, 必须至少提供一些方法是可见的(即使只是构造函数)
继承 inheritance
一个类扩展另一个类,前者会拥有后者的所有属性和方法.
php oop具有单继承的特点 -> 带来程序的高耦合性:如果程序通过深层次继承绑定到具体类,即使对父类做简单的修改,也会对子类带来严重的破坏 -> 解决办法: 1. 为了保证类之间的松绑定,通常会继承抽象类,而且是浅继承,即只有一层子类. 2. 引入trait结构
多态 polymorphism 多态只有在oop上下文中讨论才有意义,多态真正价值在于,可以调用有相同接口的对象完成不同的工作. 基于一个公共接口, 在一个给定的程序结构中做出修改或增补时, 可以放心递请求或使用接口方法而不必担心程序会崩溃 一个名字多个实现
接口通常允许开发人员创建松绑定的对象和类,php接口允许储存常量,实现接口的类都可以使用接口中储存的常量
因为数据表里没有东西所以是空数组