9、php面向对象
类权限修饰符:区别:public修饰的成员具有最高权限,可以在类的内部、外部、和子类中使用。protected可以在类的内部和子类中使用,不能在类的外部使用。而private是权限最小的,只能在类的内部使用,不允许被继承,也不允许在类的外部使用。
面向对象的封装:封装的特性就是成员访问的权限,就是以上的public、protected以及private分别在类的内部、子类当中、以及类的外部的访问权限问题。
对于继承来说,就是单一继承的特性。php的继承就是单一继承。就是同时只能继承一个类。当然有接口的情况下,可以继承一个类,再继承接口。
对于继承来说,还要注意方法重写。指的是在父类中定义一个方法,然后子类去继承父类的时候, 如果方法名称相同,会把继承的覆盖掉。如果不想覆盖,延伸 可以用parent::test();先调用一下父类的方法,然后再写子类的一些方法体。就可以了
关于面向对象的多态:抽象类的定义可以用 abstract ,在类前面加abstract 定义抽象类。对于抽象类来说,如果这个类里面有抽象方法,那么这个类必须要定义为抽象类。如果这个类里面没有抽象方法,也可以定义为抽象类
对于接口来说,接口代表的意思是里面的方法都是抽象的,定义为interface。注意没有方法体,直接用引号就可以了。代表着定义好这个方法,等着将来的后代来实现,包括抽象方法也是一样的。
接口
接口是一个特殊的抽象类,不需要添加abstract关键字;抽象方法也不需要加abstract关键字;
接口也是不能直接实例化,只能去实现接口;
接口也可以继承接口;一个子类,只能实现接口,而不是继承接口。
接口定义的关键字是interface;接口实现的关键字是implements;
接口定义中只能包含两个内容:抽象方法、类常量,其它成员都不允许;
接口中的方法权限必须是public;
魔术方法:
__construct :允行开发者在一个类中定义一个方法作为构造函数。具有构造函数的类会在每次创建新对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作。
__destruct :析构函数的概念,这类似于其它面向对象的语言,如 C++。析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。
方法重载:__call 、__callStatic:
在对象中调用一个不可访问方法时,__call() 会被调用。
用静态方式中调用一个不可访问方法时,__callStatic() 会被调用。
属性重载:
在给不可访问属性赋值时,__set() 会被调用。
读取不可访问属性的值时,__get() 会被调用。
当对不可访问属性调用 isset() 或 empty() 时,__isset() 会被调用。
当对不可访问属性调用 unset() 时,__unset() 会被调用。
__sleep() 和 __wakeup() :
serialize() 函数会检查类中是否存在一个魔术方法 __sleep()。如果存在,该方法会先被调用,然后才执行序列化操作。此功能可以用于清理对象,并返回一个包含对象中所有应被序列化的变量名称的数组。如果该方法未返回任何内容,则 NULL 被序列化,并产生一个 E_NOTICE 级别的错误。
__sleep() 方法常用于提交未提交的数据,或类似的清理操作。同时,如果有一些很大的对象,但不需要全部保存,这个功能就很好用。
与之相反, unserialize() 会检查是否存在一个 __wakeup() 方法。如果存在,则会先调用 __wakeup 方法,预先准备对象需要的资源。
__wakeup() 经常用在反序列化操作中,例如重新建立数据库连接,或执行其它初始化操作。
__toString :__toString() 方法用于一个类被当成字符串时应怎样回应。例如 echo $obj; 应该显示些什么。此方法必须返回一个字符串,否则将发出一条 E_RECOVERABLE_ERROR 级别的致命错误。
__clone : 当复制完成时,如果定义了 __clone() 方法,则新创建的对象(复制生成的对象)中的 __clone() 方法会被调用,可用于修改属性的值(如果有必要的话)。
设计模式:
面向对象设计模式
1、什么是设计模式
设计模式:就是一种设计规范,也就是前人总结的一套代码经验,我们可以在项目中直接使用。
2、常用的设计模式
单例模式:一个类只能创建一个对象,任何其它办法都无法创建第二个对象。如:数据库单例模式
工厂模式:根据传递的不同参数,去创建不同类的对象。
3、单例模式:
只有一个实例,可以节省系统资源,节省内存空间。
4、单例模式设计要求:三私一公
一私:用静态属性存储类的实例;
一私:私有的构造方法;
一私:私有的克隆方法;
一公:静态的创建实例的方法
工厂模式:
1、什么是工厂模式
根据传递不同参数,来创建不同类的对象;
自定义一个工厂类,该类中只有一个静态的公共的方法;
该方法的功能,就是创建对象实例;
方法参数的功能:主要根据参数,来创建不同对象;
方法中的判断一般用switch实现。
常见的设计模式,持续总结更新:
ps:方法名和类名保持一致的话也是构造方法