回顾
自动加载:__autoload(),而是在需要使用类的时候,而类又没有被加载进内存情况下,会自动触发的一个函数而已。
类常量:const 常量名
使用:类名::常量名
静态:静态属性和静态方法,static
使用:类名::$属性名,类名::方法名()
静态方法里不能使用$this
__toString():在将对象进行字符串输出的时候(echo),会自动触发
__clone():在对象克隆的时候会自动调用的方法(被克隆出来的新对象调用)
单例模式:一个类只能创建一个对象
特点:三私一公(私有化构造方法,私有化克隆方法,私有化静态属性,公有化静态方法)
练习:
注册:注册表单
登录:登录表单
处理
DB类文件
Privilege类
index.php:欢迎页
OOP的三大特征
封装,继承,多态
封装:将数据和对数据的操作捆绑到一起。隐藏了数据以及数据的处理,但是对外提供了操作的接口(公共的方法)
封装是可以分层次的。
继承:指的是当封装的层次低于某个层次的时候,低层次的封装可以直接从高层次的封装(class)去获得其已经拥有的属性或者方法。
class student{
//属性
public $student_id;
//方法
public function zuocao(){
课间操
}
}
class ElementalStudent{
//属性
public $student_id;
//方法
public function zuocao(){
第八套广播体操
}
}
继承
class ElementalStudent 继承 Student{
}
多态:多种形态。在面向对象里,可以存在多个同名的方法,要求每个方法的参数列表或者返回值类型不一样。(PHP不支持多态)
重载:对一个同名函数,使用不同的实现方式
PHP:错误的
class Person{
public function zuocao(小学生){
小学生做操
}
public function zuocao(){
做操
}
}
JAVA:正确
class Person{
public string function zuocao(){
return 字符串;
}
public Int function zuocao(){
return 整型;
}
Public int function zuocao(int str){
return str;
}
}
PHP继承
语法:class 子类 extends 父类
子类:继承其他类的类称之为子类。
父类:封装的最高层的类,被继承的类称之为父类。
继承到底继承了哪些东西?
继承了属性,非私有的方法(普通的)
属性继承:
方法继承:
protected:受保护的,指的是在继承链上,都可以在另外的类(不论子类和父类)都可以使用受保护的方法或者属性
继承和访问的原理
继承冲突
子类中有与父类相同的属性或者方法,那么这个时候就出现了继承冲突。
重写:overwrite,子类拥有与父类同名的属性或者方法。意味着一个类中只有一个改名字的方法。
注意
- 如果父类的的方法是私有的,那么子类拥有同名方法的时候,不是重写
重写父类方法的时候,子类里面的访问修饰限定符必须要比父类的级别低
单继承
PHP中一个子类只能继承自一个父类
错误
如果非要继承多个类,是可以做到的。链式继承。
特殊类:不能被继承的类,只能被继承的类
final类:当前类已经是最末尾的了
语法:Final class 类名
final的意义:不希望当前类还被别的类继承。防止类被扩展。
final还能修饰方法,表示方法不能被重写
final关键字只能修饰类和方法,不能修饰属性。
abstract类:抽象类,只能被继承
语法:abstract class 类名
抽象类指的是拥有抽象方法
抽象方法:使用abstract关键字修饰,没有方法体的方法、
实例化抽象类
继承自抽象类的子类必须实现抽象类里的抽象方法(或者将当前子类也声明成抽象类)
抽象类中可以有哪些东西?
凡是正常类出现的东西(属性,方法和常量)都可以在抽象类中出现。
抽象类的意义?
- 抽象类只能被继承,用来规范子类的结构。
接口
接口就是一个简单的容器,该容器专门用来规范类的结构的东西。
语法:interface 接口名字{接口体}
接口体
- 不能有属性
- 方法必须没有方法体
- 所有的访问限定修饰符必须是Public
接口定义及接口内容
接口的实现:接口的实现必须通过类才能实现
语法:class 类名 implements 接口名
类要实现接口,必须实现接口里的所有方法,实现就是给方法增加方法体。
接口的使用
一般较小的项目,追求效率的情况下,不会使用抽象类和接口来进行规范
一般较大的项目,项目团队比较多,就会使用接口或者抽象类来规范一些操作。
接口可以继承接口
面试题:
- PHP是否支持多继承?如何模拟?
不支持,链式继承
- 接口是不是类?
不是类,接口就是接口
- 接口是不是抽象类?
不是,抽象类是类的一种
- PHP是否支持多态?
不支持,PHP不允许重名函数或者方法的存在
PHP重载
在对象去访问一个类中不存在或者权限不够的属性或者方法的时候,会自动触发的一些列魔术方法。
PHP重载分为两种:属性重载,方法重载
属性重载:访问不存在的或者权限不够的属性
__get():访问一个不存在或者权限不够的属性的时候,会自动调用的方法
作用:
- 提供了一种机制,能够让对象在外部访问原本不能在类外部访问的属性的机制
- 能够控制外部对内部属性的访问
__set():在设置一个不存在或者权限不够的属性的时候,会自动调用的方法
作用:
- 使得内部一些不能在外部访问的属性在外部被设置值
- 能够控制部分属性可以被设置,而部分不能被设置
- 能够限定对象,不能无限扩展其户型
练习
- 抽象类,接口,重载
__isset()(isset和empty时调用):当在外部使用isset函数来判断对象的属性的时候会自动调用的方法
__unset()(unset调用):在外部对对象的属性进行unset的时候会自动调用的方法
方法重载:访问不存在的或者权限不够的方法
__call():普通方法访问该方法
__callStatic():当调用静态方法时会自动访问
不存在的处理方式
子类可以去显示的调用父类的构造方法
语法:parent::__construct();
本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/10700.html
如有侵犯您的合法权益请发邮件951076433@qq.com联系删除