资源描述
PHP的类、对象、构造方法,PHP提升,面向对象,从OOP的视角看,不应区分语言。无论是C+、无论是Java、无论是.net还有更多面向对象的语言,只要你了解了OO的真谛,便可以跨越语言,让你的思想轻松的跳跃。便没有对于Java、.net 、 PHP 之间谁强谁弱的争执了。,PHP5面向对象基础,类和对象 PHP5中的类和对象 PHP5 中的属性 PHP5中的方法 对象的比较 构造函数 析构函数与PHP的垃圾回收机制 面向对象实例,类和对象,Everything is Object:万事万物皆对象。 类(Class)是用来描述一个对象(Object): 类描述了每个对象应包括的数据 类描述了每个对象的行为特征 Class/Object:类(class)和对象(object)是面向对象方法的核心概念。 类是对一类事物描述,是抽象的、概念上的定义; 对象是实际存在的该类事物的每个个体,因而也称实例(instance)。 创建对象的过程称为 创建对象 也称为实例化。,PHP5中的类和对象,我们先建立一个基础的类。 PHP中使用关键字 class 来定义一个类。类的命名一般使用首字符大写,而后每个单词首字符大写连接的方式方便阅读。,这样,我们就拥有了第一个PHP类。 我们继续来使用这个类,使用 new 这个关键字创建对象,用echo打印$p。 我们定义了一个变量 $p ,使用 new 这个关键字创建了一个Person的对象。 打印变量$p,我们看到输出Object id #1 提示这是一个对象。 $p = new Person();也可以写成 $p = new Person; 但不建议使用后面的这种方式。,PHP5 中的属性,属性:用来描述对象的数据元素称为对象的属性(也称为数据/状态) 在PHP5中,属性指在class 中声明的变量。在声明变量时,必须使用 public private protected 之一进行修饰,定义变量的访问权限。 Public(公开): 可以自由的在类的内部外部读取、修改。 Private(私有): 只能在这个当前类的内部读取、修改。 Protected(受保护):能够在这个类和类的子类中读取和修改。 属性的使用:通过引用变量的 - 符号调用变量指向对象的属性。 在方法内部通过 $this- 符号调用同一对象的属性。,Person类有两个属性,$name 和 $age , 在实例化后,使用$p-name 和 $p-age 打印出属性的内容。 当然,你可以在属性定义时不设置初始值,那样的话,就打印不出任何结果了。,改变对象的属性,注意 8行和9行代码,还有输出结果的变化。我们看到输出的属性值被改变了。,创建一个Person的对象,改变这个对象的属性。为它命名,查看它的名字。按照你定义的规则,这个实实在在内存中的Person对象被创建了,而且它有了可以改变的属性。 Private 修饰的属性,在当前对象以外不能访问。设置私有属性是为了进行数据的隐藏,属性的初值 在PHP5中,在属性定义可以不设置初值,或者赋予以下红色类型的初值。 PHP中简单类型有8种,分别是: 数值类型 boolean 布尔类型 integer整型 float 浮点型,也称为 double 双精度浮点型 string 字符串 复合类型 array 数组 object对象 特殊类型 resource资源 NULL,注意: 在上面例子中,第13行,尝试创建对象并将值赋予属性$a 会报错。 第14行,建立资源并复制给$res会出现错误。 第15行,使用上面定义的属性为新属性赋值也会产生错误。 (在Java中,可以作13行和15行这样的操作。 PHP5中定义属性的默认值,被限制到最简单的方式。其它的操作,交给构造方法操作,后面内容中将讲解构造方法。),变量与引用变量 普通变量间的传值方法,就是值的赋值。比如数组,而指向对象的变量,是一个引用变量。在这个变量里面存储的是所指向对象的内存地址。引用变量传值时,传递的是这个对象的指向。而非复制这个对象。,属性的扩充 $this 指当前对象。 $this- 调用当前对象的 属性或者方法。 在类中使用$this- 调用一个未定义的属性时,PHP5会自动创建一个属性供使用。 这个被创建的属性,默认的方法权限是public。,PHP5中的方法,方法:对对象的属性进行的操作称为对象的方法(也称为行为/操作)。 过程 函数 方法 过程:过程是编制程序时定义的一个语句序列,用来完成某种指定的操作。 函数:函数有返回值,也是定义的语句序列。 方法:在面向对象概念中,类里面的一段语句序列。 一般来说,在面向对象概念中,函数和方法两个名词是通用的。,上面的例子将属性设置为private ,同时声明了public的getName()方法,用来获取属性$name的值,调用getName()方法就会通过 return $this-name 返回 $name 的值。 注意:这里,方法内部调用本地属性时,使用 $this-name来获取属性。在这个例子中,设置了公开的getName()方法,即用户只能获取$name, 而无法改变他的值。这就是封装的好处。,方法的参数 通过方法定义时的参数,可以向方法内部传递变量。 如下第5行,定义方法时定义了方法参数$_a,。 使用这个方法时,可以向方法内传递参数变量。方法内接受到的变量是局部变量,仅在方法内部有效。可以通过向属性传递变量值的方式,让这个变量应用于整个对象。,如果声明这个方法有参数,而调用这个方法时没有传递参数,或者参数数量不足, 系统会报出错误。 如果参数数量超过方法定义参数的数量,PHP就忽略多于的参数。不会报错。,可以在函数定义时为参数设定默认值。 在调用方法时,如果没有传递参数,将使用默认值填充这个参数变量。,可以向一个方法内部传递另外一个对象的引用变量。 在方法内部,这个引用可以一直传递,在需要的时候,调用这个对象的属性和方法。,再次提示 在PHP5中,指向对象的变量是引用变量。在这个变量里面存储的是所指向对象的内存地址。引用变量传值时,传递的是这个对象的指向。而非复制这个对象。 这与其它类型赋值有所不同。,对象的比较,在PHP中有 = 赋值符号、= 等于符号 和 = 全等于符号, 这些符号代表什么意思? 当使用比较操作符(=)时,对象以一种很简单的规则比较:当两个对象有相同的属性和值,属于同一个类且被定义在相同的命名空间中,则两个对象相等。等于符号比较对象时,比较对象是否有相同的属性和值。 注意:= 比较两个不同的对象的时候,可能相等也可能不等。,使用 = 符号比较两个对象 ,比较的仅仅是两个对象的内容是否一致。 当使用全等符(=)时,当且仅当两个对象指向相同类(在某一特定的命名空间中)的同一个对象时才相等。 是否在是同一个对象,两边指向的对象是否有同样的内存地址。,结果= 比较的是两个变量是否一个对象。,一个等于符号(=)表示赋值,是赋值计算。 如果将对象赋予变量,是指变量将指向这个对象。,构造函数,构造方法又称为构造函数,是对象被创建时自动调用的方法,用来完成类初始化的工作。 构造函数和其它函数一样,可以传递参数,可以设定参数默认值。 构造函数可以调用属性,可以调用方法。 构造函数可以被其它方法显式调用。 在PHP4 中使用与类名同名的方法为构造函数。在PHP5中依然支持了这种方式,但不建议再使用这种方式。,在PHP5中规定构造函数使用_ _construct() 函数表示构造函数,注意是两个 _ 。,析构函数与PHP的垃圾回收机制,析构函数:当某个对象成为垃圾或者当对象被显式销毁时执行。 GC(Garbage Collector) 在PHP中,没有任何变量指向这个对象时,这个对象就成为垃圾。PHP会将其在内存中销毁。 这是PHP的GC(Garbage Collector)垃圾处理机制,防止内存溢出。 当一个PHP线程结束时,当前占用的所有内存空间都会被销毁,当前程序中的所有对象同样被销毁。,_destruct() 析构函数,是在垃圾对象被回收时执行。 析构函数也可以被显式调用,但不要这样去做。 析构函数是由系统自动调用的,不要在程序中调用一个对象的虚构函数。 析构函数不能带有参数。,当对象没有指向时,对象被销毁。 上面的例子第10行,我们将$p设置为空或者第11行赋予$p一个字符串,这样$p之前指向的对象就成为了垃圾对象。PHP将这个对象垃圾销毁。,unset一个引用变量时。 unset 销毁的是指向对象的变量,而不是这个对象。,面向对象实例,数据库使用mysql 数据库, 数据库结构和数据如下图所示。,先写一个数据库配置文件如下:,我们先写一个纯粹面向过程的方式来读取数据库中的用户信息。,这个思维模式我们太熟悉不过了。 1. 读取配置文件中的数据库参数。 2. 建立数据库连接。 3. 选择数据库。 4. 执行sql语句。 5. 将数据返回给数组。 6. 将每个数据内容取出。 7. 将信息显示。,
展开阅读全文