欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

php面向对象

程序员文章站 2024-03-17 16:09:04
...
  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代码
php面向对象
这里调用的是say方法 所以显示的是:
php面向对象