(转)php面向对象学习笔记

一、写类的要点:javascript

类名要具备描述性,有意义php

驼峰式命名 如:class GirlFriendjava

二、 类里面的变量--成员属性编程

类里面的函数--成员方法json

三、在类的成员属性前面必定要有一个修饰词,若是不知道是用什么修饰词,就可使用var(关键字),若是一旦有其余的修饰词就不要有var设计模式

 

四、构造方法 __construct();数组

Ⅰ 、是对象建立完成之后,第一个自动调用的方法(特殊)网络

Ⅱ、方法名称比较特殊,能够和类名相同名的方法名函数

Ⅲ、给对象中的成员赋初值使用的this

五、析构方法 __destruct();

在对象被销毁以前自动调用

不能带有任参数

主要用于释放资源(如关闭文件,释放结果集等)

 

六、魔术方法:

__get()

一、自动调用:是在直接访问私有成员的时候,自动调用! 一个参数

__set()

一、自动调用:是在直接设置私有属性值的时候,自动调用! 两个参数

__isset() isset() 在使用isset()判断一个私有属性是否存在时,自动调用__isset()魔术方法,参数则是属性名称

__unset() unset() 在使用unset()删除一个私有成员的时候,自动调用__unset()魔术方法,参数为属性名称

 

面向对象的编程思想的三个特性:  封装性、继承性、多态

 

七、继承 --- 扩展 extends

① 子类使用extends继承父类,子类能够将父类中全部的内容都继承过来

② private是私有的,只能本身用,不能别人用,包括本身的子类也不能用

③ protected 这个是保护的权限, 只能是本身和本身的的子类中可使用的成员,不能在外面使用

④ public 这个是公开的权限,全部均可以, 本身和子类,类外部均可以使用

 

八、常见关键字

instanceof 

“instanceof”操做符用于检测当前对象实例是否属于某一个类的类型

final

在php中final不定义常量,因此就不会使用,也不能用final来修饰成员属性

一、final能够修饰类 -- 这个类不能去扩展,不能有子类(不让别人去扩展,这个类是最终的类时)

二、final能够修饰方法 -- 这个方法就不能在子类中覆盖(不让子类去改这个方法,或扩展这个方法的功能时,这个方法也就是最终的方法)

static

static能够修饰属性和方法,不能修饰类,

一、使用static修饰成员属性,存在内存的初始化静态段

二、能够被全部同一个类的对象共用

三、第一次用到类(类名第一次出现),类在加载到内存时,就已经将静态的成员加到了内存

对象 -> 成员

类 :: 成员

四、静态的成员必定要使用类来访问

五、self能够在类的方法中,表明本身类的($this)

六、静态成员一旦被加载,只有脚本结束才会被释放掉

七、在静态的方法中是不能访问非静态成员

八、只要能使用静态的环境下声明方法,就最好使用静态方法(主要考虑效率)

 

九、单态(单例、单件)设计模式 -- 最适合php使用这个设计模式

一、若是想让一个类只能有一个对象,就要先让这个类不能建立对象,将构造方法private

二、能够在类的内部使用一个静态方法来建立对象

 

十、对象串行化(序列化)

一、将对象转成字符串(不用看懂) --- 串行化(serialize)

二、将字符串转回对象 --- 反串行化(unserialize)

 

注意(串行化的时机):

一、将对象在网络中传输

二、将对象持久保存

数组串行化 json -- javascript object

一、eval()函数 -- 检查并执行php代码

var_dump()

var_export() -- 返回关于传递给该函数的变量的结构信息

__set_state()魔术方法,就是在使用var_export()方法时,导出一个类的信息时,自动调用的方法(静态的、公共的)

__invoke()魔术方法 ,是在对象实例以后,直接像变量函数调用时,自动调用这个方法(静态的、公共的) php5.3之后新加的方法

__call()魔术方法,是在调用不存在的方法时,自动调用这个方法

__callStatic()魔术方法,是在调用不存在的静态方法时,自动调用这个方法(静态的、公共的)   

__autoload()魔术方法,能够写在类外面,只要在这个脚本中,须要加载类的时候(必须用到类名),就会自动调用这个方法

 

十一、抽象方法和抽象类

一、什么是抽象方法?

定义:一个方法若是没有方法体(一个方法,不使用“{}”,直接使用分号结束的方法,才是没有方法体的方法),这个方法就是抽象方法

1、声明一个方法,不使用{},而直接用分号结束。

2、若是是抽象方法,必须使用abstract(抽象关键字来修饰)。

二、什么是抽象类?

1、若是一个类中有一个方法是抽象方法,则这个类就是抽象类

2、若是声明一个抽象类,则这个类必需要使用abstract关键字来修饰

 

注意1:

一、只要使用abstract修饰这个类,这个类就是抽象类

二、抽象类是一种特殊的类,特殊在哪里(在抽象类中能够有抽象方法)

三、除了在抽象类中能够有抽象方法之外,和正常的彻底同样

注意2:

一、抽象类不能实例化对象,也就是抽象类不能建立出对象

二、若是看见抽象类,就必须写这个类的子类,将抽象类中的抽象方法覆盖(加上方法体)

三、子类必须所有实现(覆盖重写)抽象方法,这个子类才能建立对象,若是只实现部分,那么还有抽象方法,则类也就必须是抽象类

 

抽象方法的做用:

抽象方法的做用是规定了子类必须有这个方法的实现,功能交给子类

只写出结构,而没有实现,实现交给具体的子类(按本身的功能)去实现

抽象类的做用:

就是要求子类的结构,因此抽象类就是一个规范

abstract class Person{

public $name;

public $sex;

//抽象方法

abstract function say();

abstract function eat();

public function run(){

echo 'run';

}

public function sleep(){

echo 'sleep';

}

}

 

十二、面向对象中的接口技术

抽象类是一种特殊的类,接口是一种特殊的抽象类,因此接口是一种特殊特殊的类

一、抽象类和接口都有抽象方法

二、抽象类和接口都不能建立实例对象

三、抽象类和接口的使用意义也就是做用相同

 

接口和抽象类相比,特殊在哪里?

一、接口中的方法,必须所有是抽象方法(不能用不抽象的方法)

因此在接口中的抽象方法不须要使用abstract,直接使用分号结束便可

二、接口中的成员属性必须是常量,不能有变量

三、接口中全部的权限都必须是共有的(public)

四、声明接口不使用class,而是使用interface

接口应用的一些细节:

一、可使用extends,让一个接口继承另外一个接口(接口和接口 -- 只有扩展新抽象方法,没有覆盖的关系)

二、可使用一个类来实现接口中的所有方法,也可使用一个抽象类,来实现接口中的部分方法

(类与接口, 抽象类与接口 -- 覆盖 -- 重写,实现接口中的抽象方法)

三、就不要使用extends关键字,使用implements实现, implements至关于extends

extends继承(扩展),这个在php中,一个类只能有一个父类

四、一个类能够在继承另外一个类的同时,使用implements实现一个接口,能够实现多个接口(必定要先继承,再实现接口)

五、实现多个接口,只须要使用逗号分开多个接口便可

 

//声明一个接口使用interface

interface Demo{

const NAME = '张三';

const SEX = '男';

function test1();

function test2();

function test3();

}

 

1三、PHP面象对象的特性多态

多态特性

一、程序扩展准备

技术:

一、必须有继承关系,父类最好是接口或者抽象类

 

1四、命名空间 -- 名字空间

一、常量

二、函数

三、类

1、namespace来声明

2、在namespace声明命名空间的代码上面,不能有任何PHP代码和HTML内容输出(除了declare),声明命名空间只能是第一条

3、定义多个命名空间,以最后一个为准

4、在实际的编程实践中,很是不提倡在同一个文件中定义多个命名空间(不要在大括号外部加任何代码)

相关文章
相关标签/搜索