php面向对象学习笔记

1、写类的要点:
类名要具有描述性,有意义
驼峰式命名 如:class GirlFriend
2、 类里面的变量--成员属性
类里面的函数--成员方法
3、在类的成员属性前面一定要有一个修饰词,如果不知道是用什么修饰词,就可以使用var(关键字),如果一旦有其他的修饰词就不要有var

4、构造方法 __construct();
Ⅰ 、是对象创建完成以后,第一个自动调用的方法(特殊)
Ⅱ、方法名称比较特殊,可以和类名相同名的方法名
Ⅲ、给对象中的成员赋初值使用的
5、析构方法 __destruct();
在对象被销毁之前自动调用
不能带有任参数
主要用于释放资源(如关闭文件,释放结果集等)

6、魔术方法:
__get()
1、自动调用:是在直接访问私有成员的时候,自动调用! 一个参数
__set()
1、自动调用:是在直接设置私有属性值的时候,自动调用! 两个参数
__isset() isset() 在使用isset()判断一个私有属性是否存在时,自动调用__isset()魔术方法,参数则是属性名称
__unset() unset() 在使用unset()删除一个私有成员的时候,自动调用__unset()魔术方法,参数为属性名称

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

7、继承 --- 扩展 extends
① 子类使用extends继承父类,子类可以将父类中所有的内容都继承过来
② private是私有的,只能自己用,不能别人用,包括自己的子类也不能用
③ protected 这个是保护的权限, 只能是自己和自己的的子类中可以使用的成员,不能在外面使用
④ public 这个是公开的权限,所有都可以, 自己和子类,类外部都可以使用

8、常见关键字
instanceof
“instanceof”操作符用于检测当前对象实例是否属于某一个类的类型
final
在php中final不定义常量,所以就不会使用,也不能用final来修饰成员属性
1、final可以修饰类 -- 这个类不能去扩展,不能有子类(不让别人去扩展,这个类是最终的类时)
2、final可以修饰方法 -- 这个方法就不能在子类中覆盖(不让子类去改这个方法,或扩展这个方法的功能时,这个方法也就是最终的方法)
static
static可以修饰属性和方法,不能修饰类,
1、使用static修饰成员属性,存在内存的初始化静态段
2、可以被所有同一个类的对象共用
3、第一次用到类(类名第一次出现),类在加载到内存时,就已经将静态的成员加到了内存
对象 -> 成员
类 :: 成员
4、静态的成员一定要使用类来访问
5、self可以在类的方法中,代表自己类的($this)
6、静态成员一旦被加载,只有脚本结束才会被释放掉
7、在静态的方法中是不能访问非静态成员
8、只要能使用静态的环境下声明方法,就最好使用静态方法(主要考虑效率)

9、单态(单例、单件)设计模式 -- 最适合php使用这个设计模式
1、如果想让一个类只能有一个对象,就要先让这个类不能创建对象,将构造方法private
2、可以在类的内部使用一个静态方法来创建对象

10、对象串行化(序列化)
1、将对象转成字符串(不用看懂) --- 串行化(serialize)
2、将字符串转回对象 --- 反串行化(unserialize)

注意(串行化的时机):
1、将对象在网络中传输
2、将对象持久保存
数组串行化 json -- javascript object
1、eval()函数 -- 检查并执行php代码
var_dump()
var_export() -- 返回关于传递给该函数的变量的结构信息
__set_state()魔术方法,就是在使用var_export()方法时,导出一个类的信息时,自动调用的方法(静态的、公共的)
__invoke()魔术方法 ,是在对象实例之后,直接像变量函数调用时,自动调用这个方法(静态的、公共的) php5.3以后新加的方法
__call()魔术方法,是在调用不存在的方法时,自动调用这个方法
__callStatic()魔术方法,是在调用不存在的静态方法时,自动调用这个方法(静态的、公共的)
__autoload()魔术方法,可以写在类外面,只要在这个脚本中,需要加载类的时候(必须用到类名),就会自动调用这个方法

11、抽象方法和抽象类
1、什么是抽象方法?
定义:一个方法如果没有方法体(一个方法,不使用“{}”,直接使用分号结束的方法,才是没有方法体的方法),这个方法就是抽象方法
一、声明一个方法,不使用{},而直接用分号结束。
二、如果是抽象方法,必须使用abstract(抽象关键字来修饰)。
2、什么是抽象类?
一、如果一个类中有一个方法是抽象方法,则这个类就是抽象类
二、如果声明一个抽象类,则这个类必须要使用abstract关键字来修饰

注意1:
1、只要使用abstract修饰这个类,这个类就是抽象类
2、抽象类是一种特殊的类,特殊在哪里(在抽象类中可以有抽象方法)
3、除了在抽象类中可以有抽象方法以外,和正常的完全一样
注意2:
1、抽象类不能实例化对象,也就是抽象类不能创建出对象
2、如果看见抽象类,就必须写这个类的子类,将抽象类中的抽象方法覆盖(加上方法体)
3、子类必须全部实现(覆盖重写)抽象方法,这个子类才能创建对象,如果只实现部分,那么还有抽象方法,则类也就必须是抽象类

抽象方法的作用:
抽象方法的作用是规定了子类必须有这个方法的实现,功能交给子类
只写出结构,而没有实现,实现交给具体的子类(按自己的功能)去实现
抽象类的作用:
就是要求子类的结构,所以抽象类就是一个规范
abstract class Person{
public $name;
public $sex;
//抽象方法
abstract function say();
abstract function eat();
public function run(){
echo 'run';
}
public function sleep(){
echo 'sleep';
}
}

12、面向对象中的接口技术
抽象类是一种特殊的类,接口是一种特殊的抽象类,所以接口是一种特殊特殊的类
1、抽象类和接口都有抽象方法
2、抽象类和接口都不能创建实例对象
3、抽象类和接口的使用意义也就是作用相同

接口和抽象类相比,特殊在哪里?
1、接口中的方法,必须全部是抽象方法(不能用不抽象的方法)
所以在接口中的抽象方法不需要使用abstract,直接使用分号结束即可
2、接口中的成员属性必须是常量,不能有变量
3、接口中所有的权限都必须是共有的(public)
4、声明接口不使用class,而是使用interface
接口应用的一些细节:
1、可以使用extends,让一个接口继承另一个接口(接口和接口 -- 只有扩展新抽象方法,没有覆盖的关系)
2、可以使用一个类来实现接口中的全部方法,也可以使用一个抽象类,来实现接口中的部分方法
(类与接口, 抽象类与接口 -- 覆盖 -- 重写,实现接口中的抽象方法)
3、就不要使用extends关键字,使用implements实现, implements相当于extends
extends继承(扩展),这个在php中,一个类只能有一个父类
4、一个类可以在继承另一个类的同时,使用implements实现一个接口,可以实现多个接口(一定要先继承,再实现接口)
5、实现多个接口,只需要使用逗号分开多个接口即可

//声明一个接口使用interface
interface Demo{
const NAME = '张三';
const SEX = '男';
function test1();
function test2();
function test3();
}

13、PHP面象对象的特性多态
多态特性
1、程序扩展准备
技术:
1、必须有继承关系,父类最好是接口或者抽象类

14、命名空间 -- 名字空间
1、常量
2、函数
3、类
一、namespace来声明
二、在namespace声明命名空间的代码上面,不能有任何PHP代码和HTML内容输出(除了declare),声明命名空间只能是第一条
三、定义多个命名空间,以最后一个为准
四、在实际的编程实践中,非常不提倡在同一个文件中定义多个命名空间(不要在大括号外部加任何代码)


posted @ 2014-08-27 15:20  蓝色&心语  阅读(240)  评论(0编辑  收藏  举报