类和对象
类是一类属性和操作方法的集合,而对象是类的实例,类是对象的抽象。
类的三大特性:
封装(让类的属性私有化,利用内部方法对外提供接口)
继承(使得一个类能够使用另一个类的所有方法和属性,这无疑提高代码的重用性)
多态(利用接口的特点来实现抽象,顶层紧紧是个抽象概念,具体实现由类完成,使得程序的扩展,重用更加方便)
静态和常量:
使用static声明的为静态的方法或者属性
静态的方法或者属性是由类直接调用的,例:ClassName::method()
静态的方法或者变量会一直存储在内存中,直到脚本的运行结束
类中常量与静态属性都是由类直接调用,不同的是常量一旦赋初值,就不能改变
构造方法和析构方法:
php中使用__construct()来定义一个构造方法,当初始化一个对象时,自动调用
构造方法的一般是用来初始化类中的属性
php中使用__destroy()来定义析构方法,当对象的所有引用都被删除或者显示删除对象时,自动调用
析构方法,是用来释放资源连接
类的自动加载:
使用场景:当我们使用自己或者别人编写的类时,要对其进行include,而我们不能一个个去包含他们,这样,既麻烦也可能忽略一些需要的类
作用:调用某个类时,自动去包含该文件
例:spl_autoload_register(function($classname)){ require_once $classname.'php'}
抽象类和接口
接口与抽象类的相同点:
1.抽象类与接口中都有抽象方法
2.接口和抽象类都不能直接被实例化
特殊点:
1.接口中的所有方法必须是抽象方法
2.接口中的成员属性必须是常量
3.接口的实现使用implements,抽象类的实现使用extends
4.接口中的方法都是public类型,而抽象类中的方法可以使用private、protected或public来修饰。
5.接口中不可以声明变量,但可以声明类常量.抽象类中可以声明各种变量
6.接口没有构造函数,抽象类可以有构造函数。
7.一个类可以同时实现多个接口,但是只能实现一个抽象类。
接口的应用细节:
1.接口可以继承接口(只有扩展,没有覆盖)
2.类和抽象类都能实现接口,但是不能继承
3.可以实现多个接口,用逗号分隔
trait
与其他语言不同的是,php使用了trait,一种代码复用的机制
例:
trait demo { function getName(){}} //定义一个trait结构
class people{ use demo} //相当于把trait结构里的代码复制进来
相同方法的覆盖优先级: 本类 > triat > extends
多个trait,方法冲突的解决方法,给方法取别名 use demo { getName as protected myName;}
注意,triat里面还可以定义,属性,静态变量,静态方法,抽象方法,