面向对象OOP--PHP

作者:烨竹

对面向过程,面向对象编程思想的理解
面向过程:

以过程为中心,将所要解决问题,分解成一步一步的,再使用函数进行封装,封装之后再按过程上的步骤进行依次调用
面向对象:
是功能进行划分,将不同的功能划分不同的主体上,再调用相应主体上的动作(功能)

类与对象

类:从众多事物中提取共性(共同的特点),形成一个具有描述性的概念
对象:对象就是类中一个具体的事物
类语法:class 类名{
//类成员
}
实例化语法:new 类名【()】;
类可以理解为图纸,而实例化则是由类得到一个实际的物体的过程

类成员:

类成员是用于描述由类产生的身上所能调用的属性与功能。
类成员以分为以下两大类:普通类成员、静态类成员
普通类成员:属性、方法、常量
静态类成员:静态属性、静态方法
静态方法和实例化方式的区分是为了解决模式的问题,举例子:比如说“人”这个类,每个人都有姓名、年龄、性别、身高等,这些属性就应该是非静态的,因为每个人都的这些属性都不相同;但人在生物学上属于哪个门哪个纲哪个目等,这个属性是属于整个人类,所以就应该是静态的——它不依赖与某个特定的人,不会有某个人是“脊椎动物门哺乳动物纲灵长目”而某个人却是“偶蹄目”的
属性(包括普通和静态成员):访问修饰控制限定符,包含三种:public是公开的;private私有的;protected受保护(可以继承)
成员方法:【访问修饰控制限定符】 function 方法名(){
//方法体
}
类常量:const
静态方法:static


成员的访问

public修饰的方法 类外类内都可以调用
private、protected修饰的方法 只能在类内使用$this调用,$this代表对象
常量的访问:类名::常量名;在类内访问常量需要使用self关键字;类内的self就代表这个类;
访问静态属性必须加$;不加则为访问常量



(1)、静态属性不需要实例化即可调用。因为静态属性存放的位置是在类里,调用方法为"类名::属性名";
(2)、静态方法不能调用非静态属性;因为非静态属性需要实例化后,存放在对象里;
(3)、静态方法可以调用非静态方法,使用 self 关键词;php里,一个方法被self:: 后,它就自动转变为静态方法;
(4)、调用类的静态函数时不会自动调用类的构造函数

成员访问相关函数:

构造方法__construct和析构方法__desctruct()
简单理解:造方法是对象创建完成后第一个被对象自动调用的方法,这是我们在对象中使用构造方法的原因。而析构方法是对象在销毁之前最后一个被对象自动调用的方法,这也是我们在对象中使用析构方法的原因。所以通常使用构造方法完成一些对象的初始化工作,使用析构方法完成一些对象在销毁之前的清理工作。

php中可以使用&符号,将对象默认的赋值传值,更改为引用传值

克隆
克隆函数:clone(对象名);
克隆方法__clone()

判断:instanceof

面向对象三大特性:封装,继承,多态

封装:计算机中的封装,就是对外隐藏内部实现的细节,对外仅公开接口,通过public、private、protected、final、static等关键字。来限制属性或方法的访问等级;
封装并不是一种语法,就书写一个类的过程时,对属性的一种设计思想;
继承:面向对象语言最大的一个功能就继承。继承表示的是一种能力。在创建一个类时,无需添加任何代码就可以拥有已存在的类的功能。
还可以在不更改现有的类的代码而进行功能的扩展。
语法:
class ClassName extends AnotherClass {
}
parent关键字,主要用于当子类中重写了父类的方法时,又想在子类中调用父类中被重写的方法,就可以使用parent指向父类
多态:多态就是多种形态,体现在代码就是同一个公开的方法多个内部实现,简单理解就是不同对象做一件事得到不同结果。


两种特殊的类:一个类只能被继承、一个类只能被实例化。

抽象类与抽象方法:只能被继承不能被实例化(abstract)
abstract class 类名{成员}
抽象方法不能是private修饰,原因抽象类中的抽象方法就是为了被继承,如果声明为private子类无法使用。



接口:只包含抽象方法与常量的抽象类可以定义为接口
语法:
interface 接口名{
接口成员
}
接口不是类,只能被类实现(implements),
接口虽然不能被类继承,但是接口可以继承接口。


最终类与最终方法:不允许其他的类来修改本类的代码(final)
语法:
final class 类名{
//类成员
}

重载:

PHP中没有真正意义的重载;php中的重载指的是对一个非公开,或不存在的属性或方法的一种处理方法。
属性重载:
__get():没权限访问时候自动调用( 访问私有属性 )
__set(): 无权操作的属性赋值时, 或不存在的属性赋值时, __set()自动调用(方法用来设置私有属性)
__isset() : 用isset() 判断对象不可见的属性时(protected/private/不存在的属性) 会引发 __isset()来执行
方法重载:
__call():作用:在调用对象中不存在的方法时,就会出现系统报错,然后退出, 声明时候自动调用:就是在调用一个对象中不存在的方法时自动调用(处理一些不存在的方法的错误调用,需要两个参数,具体的看api)
__callStatic:调用一个不存在的静态方法的时候自动调用
__toString():时机:将一个对象当作字符串输出的时候自动调用(直接echo 对象)。必须return

自动加载:

__autoload()函数:实例化对象时,自动调用(其它的魔术方法都是在类中添加起作用,这是一个唯一一个不在类中添加方法的,只要在页面中使用掉一个类,只要用到这个类名,就会自动将类名传给这个参数)
spl_autoload_register(fun);将我们自己定义的加载函数,注册到php的自动加载机制中


设计模式

所谓的设计模式,就是具有多年开发经验的,开发者,在开发的过程中,为了解决某个需求,而形成的一套代码方案
单例模式:就是单一的实例,一个类永远只能产生一个实例



工厂模式:一个负责其他类的实例化工作



工厂单例模式:并不是工厂类是单例,而是通过工厂类所创建的其他的类实现单例
2..png

命名空间:

namespace 空间名\空间名;
use \空间名\空间名
空间成员的访问
①、非限定
语法:
空间成员;
说明:
空间成员前什么都不加。
非限定只能访问当前空间中的成员。
②、限定
语法:
空间名\空间名\空间成员
说明:
只能访问当前空间的子空间中的成员。
③、完全限定
语法:
\空间名\空间名\空间成员
说明:
可以访问任意空间中的成员
 对于空间成员的访问,掌握以下几点:
 当前空间 所要访问的空间成员所在的空间
 当前空间与所访问的空间成员在同一个空间 直接写成员名
 所访问的空间成员是当前空间的子空间 限定
 访问其他空间的成员 完全限

数据保存:

程序语言中数据划分多种类型,数据有两种方面组成,其一是数据的值,其后是数据的类型。
程序在运行的过程中,数据是保存在内存中的变量中的,只程序运行结束,数据就会被销毁。
为了保存程序在运行过程上的产生的数据,我们可以将数据保存在文件中。如果数据比较简单可以选择文件进行保存。
如果使用文件保存数据,由于文件文件中只能保存字符串。
为了能够将数据的类型与值一同保存起来,所以需要使用序列化
序列化
序列化就是将数据转换为一种能够即可以表示类型又可以表示值的字符串。
serialize(变量);将指定的变量中的数据进行序列化
反序列化
unserialize(string);
string是序列化后的字符串。
是对string进行返回序列化。
对象的序列化与反序列化:
__sellp:将对象转换为字符串用于持久存储(使用serialize 将对象串行化的时候会自动调用,串行化一个对象将会保存对象的所有属性变量和类名信息,但是不会保存对象的方法)
__wakeup:使用unserialize 将字符串还原为对象的时候会自动调用

反射机制

反射(Reflection)一词形象说明一个类的作用;获取所服务的类所有的信息,与一个类相关的信息

反射类
①、export方法
ReflectionClass::export(类名或对象)
说明:
用于返回一个类相关成员的描述



②、反射对象
ReflectionClass即然是一个类也可以被实例化。
语法:
$ref = new ReflectionClass(类名或对象);
说明:
用于实例化一个反射对象


异常:

异常处理语法:
try{
//try语句块
throw(异常对象);
}catch(异常类 $e){
//异常处理块
}catch(异常类 $e){
//异常处理块
}
说明:
在try语句块中尝试捕获与catch后的异常类对应的异常对象,将异常对象捕获到$e这个变量中。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,001评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,210评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,874评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,001评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,022评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,005评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,929评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,742评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,193评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,427评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,583评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,305评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,911评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,564评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,731评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,581评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,478评论 2 352