(转)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),声明命名空间只能是第一条

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

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

原文地址:https://www.cnblogs.com/leole/p/4236298.html