PHP面向对象程序设计

上传人:平*** 文档编号:48594634 上传时间:2018-07-17 格式:PPT 页数:33 大小:399.02KB
返回 下载 相关 举报
PHP面向对象程序设计_第1页
第1页 / 共33页
PHP面向对象程序设计_第2页
第2页 / 共33页
PHP面向对象程序设计_第3页
第3页 / 共33页
PHP面向对象程序设计_第4页
第4页 / 共33页
PHP面向对象程序设计_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《PHP面向对象程序设计》由会员分享,可在线阅读,更多相关《PHP面向对象程序设计(33页珍藏版)》请在金锄头文库上搜索。

1、 第6章 PHP面向对象程序设计6 . 1 基 本 概 念6 . 2 PHP中的类6 . 3 类 的 继 承6 . 4 抽象类与接口6 . 5 类的魔术方法6 . 6 类型判断与引用6 . 7 实例设计一个学生管理类6 . 1 基 本 概 念1封装 封装是将数据和代码捆绑到一起,避免外界的干扰和不确定性。在PHP中, 封装是通过类来实现的。类是抽象数据类型的实现,一个类的所有对象都具有相 同的数据结构,并且共享相同的实现操作的代码,而各个对象又有着各自不同的 状态,即私有的存储。因此,类是所有对象的共同的行为和不同状态的结合体。 2继承 类提供了创建新类的一种方法,再借助于“继承”这一重要机制

2、扩充了类的定 义,实现了面向对象的优越性。 继承提供了创建新类的方法,这种方法就是,一个新类可以通过对已有的类 进行修改或扩充来满足新类的需求。新类共享已有类的行为,而自己还具有修改 的或额外添加的行为。因此,可以说继承的本质特征是行为共享。 3多态 不同的类对于不同的操作具有不同的行为,称为多态。多态机制使具有不同 的内部结构的对象可以共享相同的外部接口,通过这种方式减少代码的复杂度。6 . 2 PHP中的类6.2.1 创建类 类是面向对象程序设计的核心,它是一种数据类型。类由变量和函数组成, 在类里面,变量称为属性或成员变量,函数称为方法。定义类的语法格式如下: class classna

3、me var $property= value;function functionname($args)/代码 6.2.1 创建类自 PHP 5.5 起,关键字 class 也可用于类名的解析。使用classname:class 可 以获取一个字符串,包含了类classname的完全限定名称。这对使用了命名空间的 类尤为有用。例如:以上程序会输出: NSclassname6.2.2 类的属性和方法在类中,使用关键字var来声明变量,即类的属性。使用关键字function来定义 函数,即类的方法。例如,以下是一个简单的类定义: class a var $a=hello world;functio

4、n fun($b)echo “hello world“; 6.2.2 类的属性和方法自PHP 5.3.0起,新增对nowdoc(详见第3.2.3节)的支持,即可以使用 nowdoc初始化属性,例如: class a var $a=var $tmp;6.2.3 类的实例化在声明一个类后,类只存在于文件中,程序不能直接调用。需要创建一个对象 后程序才能使用,创建一个类对象的过程叫做类的实例化。类的实例化使用new关 键字,关键字后面需要指定实例化的类名,例如,定义一个Ctest类并实例化: stunumber=$str; /使用$this指针引用类内部的属性echo $this-stunumber

5、; $obj=new Ctest; /创建Ctest类的一个对象$obj ? 在实例化一个类时,有些类允许在实例化时接收参数,如果能够接收参数,可 以使用以下代码创建对象,其中$args是所带参数: $obj=new Ctest($args,);6.2.4 类的访问在对象被创建之后,可以在类的外部对该类的属性和方法进行访问,访问的方法是在该类对象后面使用“-”符号加上要访问的属性和方法。例如,创建了对象“$obj”,类中有属性“$stunumber”,要访问该属性可以使用“$obj-stunumber”,注意属性的前面没有“$”。例如,访问Ctest类的属性和方法: $obj-stunumbe

6、r=081102; /给类属性$stunumber赋值 echo $obj-stunumber; /输出081102 $obj-add(081101); /输出0811016.2.4 类的访问在PHP 5中,引入了访问修饰符public、private和protected。它们可以控制属性和方法的可见性,通常放置在属性和方法的声明之前。 public。声明为公用的属性和方法,可以在类的外部或内部进行访问。public是默认选项,如果没有为一个属性或方法指定修饰符,那么它将是public的。 private。声明为私有的属性和方法,只可以在类的内部进行访问。私有的属性和方法将不会被继承。 pro

7、tected。声明为被保护的属性和方法,只可以在类的内部和子类的内部进行访问。6.2.4 类的访问说明:为了向后兼容PHP 4,PHP 5 声明属性依然可以直接使用关键字var来 替代(或者附加于)public、private或protected,但是已不再需要var了。从PHP 5.0到5.1.3,var一度曾被认为是废弃的,且抛出E_STRICT警告,但是PHP 5.1.3 之后它不再认为是废弃的,也不会抛出警告。如果直接使用var声明属性,而没有 用public、private或protected之一,PHP 5 会将其视为public。例如: number=“081101“; echo

8、 $object-number; /输出“081101“ $object-Stuinfo(); /输出“学生信息“ $object-phone=“84565879“; /本语句出错,访问权限不够 ?6.2.5 静态属性和方法访问静态属性和方法时需要使用到范围解析符“:”,格式如下: classname:$attribute; /访问静态属性 classname:Cfunction($args,); /访问静态方法 例如:6.2.6 构造函数和析构函数 构造函数。在PHP 4中,在类的内部与类同名的函数都被认为是构造函数, 在创建类的对象时被自动执行。而在PHP 5中,构造函数的名称为_cons

9、truct, “construct”的前面是两根下画线。 析构函数。类的析构函数的名称是_destruct,如果在类中声明了 _destruct函数,PHP将在对象被销毁前调用析构函数将对象从内存中销毁,节省 服务器资源。 例如:6 . 3 类 的 继 承6.3.1 子类访问父类在PHP中,允许通过继承其他类的方法来调用这些类里已经定义好的属性和方法,PHP不支持多继承,所以一个子类只能继承一个父类。可以使用extends关键字来指明类与类之间的继承关系。例如,以下是类B继承类A的代码。6.3.2 方法重载方法的重载是指在一个类中可以定义多个拥有相同名称的方法,通过参数个数和类型来区分这些方法

10、,而PHP目前并不支持这一特性。但可以通过类的继承,在子类中定义和父类中相同名称的方法来实现类似于方法重载的特性。例如:上述代码中,类B重载了类A的属性$attribute和方法func(),但类A的初始定义不会改变,例如,在以上代码的最后添加如下两行: $a=new A; $a- func(); /输出“父类A“6.3.3 使用final关键字PHP 5引入了final关键字,在声明类时使用这个关键字,将使这个类不能被继承。例如,定义一个类A: final class A /. 如果类B尝试继承类A,将会提示以下错误:Fatal error: Class B may not inherit

11、from final class (A)另外,如果将final关键字用于声明类中的方法,该方法将不能在任何子类中重载。6.3.4 Traits机制Traits和一个类相似,但仅仅旨在用细粒度和一致的方式来组合功能。Traits不 能通过它自身来实例化。它为传统继承增加了水平特性的组合。例如: sayHello(); ?6 . 4 抽象类与接口6.4.1 抽象类抽象类也是PHP 5引入的新特性,它是一种特殊的类,使用关键字abstract来定义,不能被实例化。一个抽象类中至少包含一个抽象方法,抽象方法也是由abstract关键字来定义的。抽象方法只提供了方法的声明,不提供方法的具体实现。例如:a

12、bstract function func($name, $number);包含抽象方法的类必须是抽象类。抽象类不能用于创建对象,所以只能通过继承来使用。继承抽象类的子类,必须重载抽象类中的所有抽象方法才能被实例化。例如。6.4.2 接口1接口的概念 PHP只能进行单继承,即一个类只能有一个父类。为了解决这个问题, PHP 5引入了接口的概念,接口是一个特殊的抽象类,使用interface关键字取代 class关键字来定义。抽象类中允许存在非抽象的方法和属性,而在接口中定义的 方法都是抽象方法。在接口中不能使用属性,但可以使用const关键字定义的常量 。例如: const con=“tom“

13、; 接口的定义方法和定义类的方法类似,在接口中定义抽象方法不使用abstract 关键字。例如:6.4.2 接口接口和类一样,也支持继承,接口之间的继承也使用extends关键字。例如:6.4.2 接口2接口的实现 定义了接口之后可以将其实例化,接口的实例化称为接口的实现。要实现一个 接口需要一个子类来实现接口的所有抽象方法。定义接口的子类使用implements关 键字,另外,一个子类还可以实现多个接口,这样就解决了多继承的问题。例如。 一个子类还可以同时继承一个父类和多个接口,例如,假设类base和上面代码 中的接口已经创建,创建一个子类继承它们可以使用如下代码: class test e

14、xtends base implements Teacher, Stu /类内容省略 6 . 5 类的魔术方法6.5.1 克隆对象PHP使用clone关键字建立一个与原对象拥有相同属性和方法的对象,这种方法用于通过一个类实例化两个类似对象的情况下。例如:$new_obj=clone $old_obj;$new_obj是新的对象名,$old_obj是要克隆的对象名。6.5.1 克隆对象克隆后的对象拥有克隆对象的全部属性,如果需要改变这些属性,可以使用 PHP提供的魔术方法_clone。这个方法在克隆一个对象时将被自动调用,类似于 _construct和_destruct方法。在_clone方法中

15、,可以定义确切的复制行为或执 行一些操作。例如: id=$this-id+1; $c1=new Cid; $c2=clone $c1; echo $c1-id; /输出1 echo $c2-id; /输出2 ?6.5.2 方法重载PHP 5中有一个魔术方法_call,该方法可以用于实现方法的重载。_call方法必须有两个参数。第一个参数包含被调用的方法名称,第二个参数包含传递给该方法的参数数组。_call方法在类中的方法被访问时被调用。例如。6.5.3 属性重载通常情况下,从类的外部直接访问类的属性是不建议使用的方法。若一定要这 么做,可以通过PHP的“属性重载”机制,使用_get和_set方法来检查和设置属性 的值,这样就可以实现封装性。例如: $name;function _set($name,$value)if($name=attribute)$this-$name=$value; $a=attribute

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号