面向对象的基本知识

来源:互联网 发布:人工智能武器 编辑:程序博客网 时间:2024/06/16 09:38
面向对象编程 OOP
面向对象的五大基本原则
单一职责原则(SRP)
开放封闭原则(OCP)
里氏替换原则(LSP)
依赖倒置原则(DIP)
接口隔离原则(ISP)
单一职责原则SRP(Single Responsibility Principle)
是指一个类的功能要单一,不能包罗万象。如同一个人一样,分配的工作不能太多,否则一天到晚虽然忙忙碌碌的,但效率却高不起来。
开放封闭原则OCP(Open-Close Principle)
一个模块在扩展性方面应该是开放的而在更改性方面应该是封闭的。比如:一个网络模块,原来只服务端功能,而现在要加入客户端功能,那么应当在不用修改服务端功能代码的前提下,就能够增加客户端功能的实现代码,这要求在设计之初,就应当将服务端和客户端分开,公共部分抽象出来。
里式替换原则LSP(the Liskov Substitution Principle LSP)
子类应当可以替换父类并出现在父类能够出现的任何地方。比如:公司搞年度晚会,所有员工可以参加抽奖,那么不管是老员工还是新员工,也不管是总部员工还是外派员工,都应当可以参加抽奖,否则这公司就不和谐了。
依赖倒置原则DIP(the Dependency Inversion Principle DIP)
具体依赖抽象,上层依赖下层。假设B是较A低的模块,但B需要使用到A的功能,这个时候,B不应当直接使用A中的具体类: 而应当由B定义一抽象接口,并由A来实现这个抽象接口,B只使用这个抽象接口:这样就达到了依赖倒置的目的,B也解除了对A的依赖,反过来是A依赖于B定义的抽象接口。通过上层模块难以避免依赖下层模块,假如B也直接依赖A的实现,那么就可能 造成循环依赖。一个常见的问题就是编译A模块时需要直接包含到B模块的cpp文件,而编译B时同样要直接包含到A的cpp文件。
接口分离原则ISP(the Interface Segregation Principle ISP)
模块间要通过抽象接口隔离开,而不是通过具体的类强耦合起来
--面向对象的三大特征:封装、继承、多态
什么是继承?
子类可以继承父类所有的构造方法及属性,构造方法,当子类继承父类的时候,如果子类有构造方法,会先执行子类中的构造方法及成员方法,如果子类没有构造方法,会先执行父类中的构造方法及成员方法!(子类调用父类中的构造方法:parent::__construct();)

注意:如果子类有静态方法时,在类外直接调用子类,这个时候即使父类有构造方法,也不会走父类的,直接调用子类的静态方法!
什么是封装 ? 封装性,可以称为信息隐藏
什么是多态? 多种实现方式
实例化类时,类中的构造函数会自动启动。如__construct()
即在生成对象的时候自动调用的方法是__construct()
在对象销毁时自动调用的方法是__destruct()
$obj=new 类名();小括号可省略。 实例化对象
get_class($obj);//获取当前实例化的对象的类名
$obj->function();小括号不可省略。
$_SERVER['HTTP_USER_AGENT'];获取用户信息,浏览器版本......
面向对象是一种计算机编程架构,比面向过程具有更强的灵活 性和扩展性。
面向对象分析:OOA;
面向对象设计:OOD;
面向对象编程:OOP;
抽象类abstract (定义抽象类关键字)可以被继承extends
①继承一个抽象类的时候,子类必须定义父类中的所有抽象方法
另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。例如某个抽象方法被声明为受保护的,那么子类中实现的方法就应该声明为受保护的或者公有的,而不能定义为私有的!
②定义为抽象的类不能被实例化!
③任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。(什么是抽象类?)
对象接口interface(定义接口关键字)
接口中定义所有的方法必须是公有,这是接口的特性:public
②实现的时候用的是:implements;
③类中必须实现接口中定义的所有方法,否则会报一个致命错误(即接口可以继承,如果有接口继承了父接口,那么父接口中的方法也必须要全部实现)
有抽象方法的类,不是接口就是抽象类
静态方法和静态属性:static
在外部访问静态方法时使用$实例化对象 ->静态方法名(可以)但是静态属性不可以这样调用;(->)
①在类外调用静态方法:类名::方法名();实例化对象->静态方法名();实例化对象::方法名();
①在类外调用静态属性:类名::属性;
实例化对象::属性;
②在静态方法内调用静态属性(变量):self::$静态属性。
在类的外部用类名::$静态属性名来调用静态属性
在类的内部普通方法用self::$静态属性名来调用静态属性
用来判断对象是否属于某个类:instanceof;
注意:静态方法中只能调用静态的属性(变量),不能调用普通变量。但是普通方法可以调用静态属性!
public protected private
公有 受保护的 私有的
在类外调用公有的属性 :对象->属性(没有$,没有小括号);
public 可以在任何时候调用
protected 可以在本类 、子类中调用;
private 只能在本类中调用;
Afinal 修饰的类不能被继承!
B 类中定义常量的关键字是const
如: const CONSTANT = 'CONSTANT value' ;
使用const定义的常量名称前不需要使用“$“符号,且常量名称通常都是大写的。
在本类中调用常量:self::常量名; self::CONSTANT
在类外调用常量:类名::常量名;
C:重写就是在子类中对父类的方法进行重新定义
重写要求子类的方法名和父类的方法名相同
当使用echo或print输出对象时,自动调用的魔术方法是()__toString()
当程序要用到一个类,但该类还没有被实例化时,php5将自动调用的魔术方法是():__autoload()
php的继承:子类拥有与父类同名的属性或者方法,就会覆盖父类的属性或者方法
A.当程序试图调用一个不存在的成员变量时:自动调用的魔术方法是:__get();
B.当程序试图调用一个不存在的成员方法时:自动调用的魔术方法是:__call();
C.当程序试图写入一个不存在的成员变量时:自动调用的魔术方法是:__set();
单例模式 (设计模式)
1.单例模式是一种设计模式;
2.一个类只能实例化一个对象,节省内存空间和资源。
①单例模式类中私有的构造方法-为了防止在类外使用new关键字实例化对象
单例模式类中私有的成员属性-为了防止在类外引入这个存放对象的属性
单例模式类中私有的克隆方法-为了防止在类外通过clone成生另一个对象
3.检测对象是否属于某个类的函数是:instanceof
单例模式:
1.私有的构造方法,静态属性,克隆方法;
2.公有的静态方法给外部提供一个接口;
3.final 修饰私有的构造方法;(防止子类重写构造方法!)
MVC模式(设计模式)
MVC是一种三层架构的设计模式,增加了代码的重用性,让程序更加规范
M代表模型Model
C代表控制器,是核心层Controller
V代表视图View
Model是应用程序中用于处理应用程序数据逻辑的部分!
view是应用程序中用于处理数据显示的部分!
Controller是应用程序中处理用户交互的部分!
Controller-----从Model中获取数据,并输入到View中
接受View中的用户操作,然后做出相应的响应。
PHP设计者模式
1.单例模式
2.工厂模式
3.观察者模式
4.策略模式
5.命令链模式