首页 > php学习 > php基础知识 > PHP面向对象(OOP)的概念特点和创建
2016
12-16

PHP面向对象(OOP)的概念特点和创建

一.OOP的特点

封装:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。

继承:继承是从一个基类得到一个或多个类的机制。继承自另一个类的类被称为该类的子类。子类将继承父类的特性。子类可以增加父类之外的新的属性和方法,因此子类也被称为父类的“扩展”。

多态:多态是指OOP能够根据使用类的上下文来重新定义或改变类的性质或行为,或者说接口的多种不同的实现方式即为多态。

二.关键的OOP概念

类(class):类是对某个对象的定义。它包含有关对象动作方式的信息,包括它的名称、方法、属性和事件。实际上它本身并不是对象,因为它不存在于内存中。当引用类的代码运行时,类的一个新的实例,即对象,就在内存中创建了。

对象(object):对象是一件事、一个实体、一个名词,可以获得的东西,可以想象有自己的标识的任何东西。对象是类的实例化。概括来说就是:一切皆对象。

字段(filed):字段是用于描述类的某方面的性质,它与一般的PHP变量非常相似,只是有一些细微的差别。

属性(property):通过方法来访问和操作字段,可以保护字段。

方法(method):与函数非常相似,只不过方法是用来定义类的行为。与函数一样,方法可以接受输入参数,可以向调用者返回一个值。

对象标识:作为php内部管理对象时,为对象分配的唯一标识,与该对象是哪个类的实例无关,所有对象统一使用标识管理,使用var_dump打印对象是的#1,就是一个标识。对象标识引起的一个对象特有的现象:当$ob01已经实例化以后,使用语法$ob02=$ob01,在此之后修改$ob01或者$ob02里面的属性或者方法,另外一个对象也跟着一起改变(在赋值传递的时候是赋予$ob02一个对象标识符,php通过标识符找到的是同一个实例对象)。相当于变量中的引用赋值,如果想使用值传递的方式需要使用克隆操作:$ob02=clone $ob01。

三.创建OOP

类的创建:

class Computer { //类名的第一个一般字母大写

public $_name = '姓名'; //格式:修饰符 变量名[=变量值]

public function _run( $_what){echo $_what . ' 成功的运行了! ' ;}

}

对象的声明:$computer=new Computer();

new标识符是为了在内存中创建一个对象(实例),而Computer()就是那个类所生成的实例。

$computer是一个变量,而且又是生成实例的引用。你可能创建多个对象。

$computer ->_name;//读取字段,变量名称前面没有$符号

$computer ->_name = '姓名2' ; //设置字段

$computer ->_run('电脑');//访问运行方法

对象的遍历:对象的遍历使用的一般比较少,因为对象我们一般看作一个整体。对象可以使用foreach遍历,使用方法和遍历数组相同,但是只能遍历出公共属性,并不能遍历出私有属性和方法

foreach ($job as $p => $v){}

一般情况下遍历对象会发生在php内核中的一个stdClass类的实例对象,这个类就是专门用来存储数据的,如使用强制转换$job=(object) $array,此时会把数组强制转换为对象,该对象就是stdClass类的一个实例对象。

构造方法:所谓构造方法,也是方法,只不过是一种特殊的方法。而方法名必须和类名一致 ,并且不需要像普通方法一样,必须通过调用才能执行,只需要实例化即完成调用过程 。一般来说,构造方法总是在做一些初始化的工作。

class Computer {

function Computer () {echo ' 我是构造方法! ';}

}

new Computer(); // 在实例化的过程中就已经完成了调用

在 PHP5 我们可以通过 __construct的内置方法来识别构造方法,而不用再需要和类名相同了。

class Computer {

function __construct(){echo ' 我是构造方法! ' ;}

}

相对应构造方法,还有一种内置的方法是析构方法,它的用途在整个类使用完毕后执行。一般可用于清理内存中对象(脚本执行完毕的时候会自动清理)。 而如果有脚本执行完毕后并没有清理的,比如数据库数据等,就有必要使用析构方法。

class Computer {

function __destruct() {echo ' 我是析构方法 ' ;}

}

最后编辑:
作者:qingheluo
这个作者貌似有点懒,什么都没有留下。