php中面向对象分析

  1. 介绍
    面向对象是一个编程思想。编程思想有面向过程和面向对象
    面向过程:编程思路集中的是过程上
    面向对象:编程思路集中在参与的对象
  2. 优点
    多人合作方便
    减少代码的冗余,灵活性高
    代码的可重用性发挥到极致
    可扩展性强
  3. 类和对象
    1.对象是具体存在的事物,对象是由属性和方法组成
    2.类是具有相同属性和行为的一组对象的集合
    注意:一个类可以创建多个对象
    小结:
    1.对象是由属性和方法组成的
    2.类是所有对象的相同属性和方法的集合
    3.在开发的时候先写类,通过类创建对象,通过对象调用方法和属性

4.在php中实现类和对象

 创建类:
	   语法:
	     class 类名{
   	         	//属性
   	        	//方法
	        	//常量
	}

类是由属性、方法、常量组成的,也可以说
类成员有:属性、方法、常量
类的命名规则:
1.以字母、下划线开头,后面跟的是字母、数字、下划线
2.不能用PHP关键字做类名
3.类名不区分大小写(变量名区分,关键字、类名不区分大小写)
4.类名用帕斯卡命名法(大驼峰 单词的首字母大写)
对象实例化:
通过new关键字来实例化对象

<?php
//定义类
class Student {
    
}
//实例化对象
$stu1=new Student();

对象的比较:
注意:对象的传递是地址传递
相等:结构和保存的值一样就相等
全等:指向同一个对象才是全等
属性::
属性本质就是变量
通过 ->调用对象的成员
对象名->属性名
对象名->方法名()
方法:
方法的本质就是函数
注意:
1.方法前面public是可以省略的,如果省略,默认就是public的。
2.属性前面的public不能省略

三大特性:

  1. 封装
    封装就是把抽象出的数据和对数据的操作封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作(成员方法)才能对数据进行操作。

  2. 继承
    所谓继承,就是一个子类通过extends 父类 把父类的一些(public / protected)属性和(public / protected)方法继承下来。不能继承私有的。
    注意:
    (1) protected属性和方法受保护,在子类不能直接调用,要在子类中定义方法访问。
    (2) 如果希望子类调用父类的构造方法,或者其他方法(public / protected),可以使用类名::方法名; 或者parent::方法名;
    (3) 当一个子类的方法和父类方法(protected/public)完全一致时,我们称之为方法的覆盖(重写)。

  3. 多态
    “重载”是类的多态的一种表现
    重载的概念:函数名一样,通过函数的参数个数或者参数类型不同,达到调用同一个函数名,但是可以区分不同的函数。
    魔法函数__call,但不推荐使用; 它一个对象调用某个方法,而该方法不存在,则系统会自动调用__call。
    常见魔法常量:两个下划线LINE两个下划线;当前多少行;
    两个下划线FILE两个下划线;当前文件的绝对路径;
    方法的重写/覆盖(override):
    1、当一个父类知道所有的子类都有一个方法,但是父类不能确定该方法究竟如何写,可以让子类去覆盖这个方法。
    方法重写的细节:
    1、重写子类的函数名和参数个数必须和父类的一致;但不要求参数的名称一样。
    2、如果子类要去调用父类的某个方法(public / protected)可以使用parent::方法名(); 或者父类名::方法名(); 可根据情况是否传参。
    3、实现方法覆盖时,访问修饰符可以不一样,但是必须满足子类的访问范围>=父类的访问范围。
    多态体现的地方:
    当子类没有覆盖父类的方法,则子类调用的是父类,当子类覆盖了父类的方法则调用的是自己的方法。

设计模式:
设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。
项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。

设计模式的优点:
1).复用解决方案: 设计模式本身就是对某一类问题的通用解决方案,是更高级别的复用,已经超出了代码复用.
2).确定通用术语:开发中的交流和协作都需要共同的词汇其础和对问题的共识. 当你有想表达却又表达不清楚的设计思路,即使表达出来也会被同事误解的时候,设计模式就显出沟通的优势了。
3).代码更易于修改与维护。因为设计模式都是久经考验的解决方案,它们的结构都是经过长期的发展形成的,善于应对变化,设计模式本身也是对变化点的封装。
4).模式有助于提高思考层次。学习模式后,就算不用模式中的方法,也会更好的采取更好的策略去解决问题。

六大原则:
1 单一职责
不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。
优点:
1)可以降低类的复杂度,一个类只负责一项职责,逻辑简单;
2)提高类的可读性,提高系统的可维护性;
3)变更引起的风险降低,变更是必然的。
2 里氏代换原则
所有引用基类的地方必须能透明地使用其子类的对象,也就是说子类可以扩展父类的功能,但不能改变父类原有的功能
3 依赖倒置原则
高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。
优点:
1)低层模块尽量都要有抽象类或接口,或者两者都有。
2)变量的声明类型尽量是抽象类或接口。
3)使用继承时遵循里氏替换原则。
4 接口隔离原则
客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。
注意:
1)接口尽量小,但是要有限度。对接口进行细化可以提高程序设计灵活性是不挣的事实,但是如果过小,则会造成接口数量过多,使设计复杂化。所以一定要适度。
2)为依赖接口的类定制服务,只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来。只有专注地为一个模块提供定制服务,才能建立最小的依赖关系。
3)提高内聚,减少对外交互。使接口用最少的方法去完成最多的事情。
5 迪米特法则
一个对象应该对其他对象保持最少的了解。
注意:
1)只与直接的朋友通信,不要和陌生人说话。
2)过分的使用该原则,将导致系统复杂度变大。所以在采用迪米特法则时要反复权衡,既做到结构清晰,又要高内聚低耦合。
6 开闭原则
一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。
建议:
当软件需求变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。

设计模式:
一般将面向对象设计模式分为三类:创建型、结构型、行为型三种。
创建型:创建对象时,不再由我们直接实例化对象;而是根据特定场景,由程序来确定创建对象的方式,从而保证更大的性能、更好的架构优势。创建型模式主要有简单工厂模式(并不是23种设计模式之一)、工厂方法、抽象工厂模式、单例模式、生成器模式、原型模式。
结构型:用于帮助将多个对象组织成更大的结构。结构型模式主要有适配器模式、桥接模式、组合器模式、装饰器模式、门面模式、亨元模式和代理模式。
行为型:用于帮助系统间各对象的通信,以及如何控制复杂系统中流程。行为型模式主要有命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板模式、访问者模式和职责链模式。

常见的设计模式:
1 单例模式
单例模式:instance,多态的体现。
单例模式顾名思义,就是只有一个实例。作为对象的创建模式, 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
案例:
1).php的应用主要在于数据库应用, 一个应用中会存在大量的数据库操作, 在使用面向对象的方式开发时, 如果使用单例模式, 则可以避免大量的new 操作消耗的资源,还可以减少数据库连接这样就不容易出现 too many connections情况。
2).如果系统中需要有一个类来全局控制某些配置信息, 那么使用单例模式可以很方便的实现.
2 简单工厂模式
工厂模式是我们最常用的实例化对象模式,是用工厂方法代替new操作的一种模式。
就是用工厂类的方法去实例化其他类。
3 观察者模式
观察者模式属于行为模式,是定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依 赖于它的对象都得到通知并自动刷新。
它完美的将观察者对象和被观察者对象分离。
4 注册模式
注册模式,解决全局共享和交换对象。已经创建好的对象,挂在到某个全局可以使用的数组上,在需要使用的时候,直接从该数组上获取即可。
将对象注册到全局的树上。任何地方直接去访问。
5 适配器模式
将各种截然不同的函数接口封装成统一的API。
PHP中的数据库操作有MySQL,MySQLi,PDO三种,可以用适配器模式统一成一致,使不同的数据库操作,统一成一样的API。

附带一个简单的例子:
面向对象就是将要完成的整个工作拆分成一个个功能
每个功能之间独立完成自己的任务
任务之间的链接通过“调用”来实现
最终完成整体的工作

demo.php代码
在这里插入图片描述
这里调用的是say方法 所以显示的是:
在这里插入图片描述

发布了22 篇原创文章 · 获赞 2 · 访问量 436

猜你喜欢

转载自blog.csdn.net/jianchenn/article/details/105074909