《PHP动态网站设计(专)》第5章 面向对象编程学习指导文件.pdf

上传人:奥****文 文档编号:2309602 上传时间:2024-06-11 格式:PDF 页数:6 大小:538.17KB
下载 相关 举报
《PHP动态网站设计(专)》第5章 面向对象编程学习指导文件.pdf_第1页
第1页 / 共6页
亲,该文档总共6页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、 第五章(第五章(项目五项目五)面面向向对象编程对象编程 学习指导学习指导 一、认识面向对象编程一、认识面向对象编程 面向对象程序设计是 20 世纪 80 年代发展起来的一种程序设计方法,它通过对象模拟现实世界,利用抽象的方法来设计软件。面向对象程序设计的 3 个主要特征为封装、继承和多态。封装:指将数据和处理数据的方法包含在一起,成为一个类,类实例化成为对象。每一个对象都是该类的一个独立实体。对用户而言,类的内部是隐藏的,只能通过公开的数据或者方法来操作对象。继承:指一个类传承了另一个类的全部特征,并具有自己的特征。通过继承得到的新的类可称为派生类或者子类,被继承者称为基类或者父类。多态:是

2、指对象的同一个动作在不同情况下可能产生不同的结果,PHP 可通过方法重载来实现多态。这些概念听起来有些不好理解,下面我们通过一些实例来慢慢消化。在 PHP 中,对象的数据和方法对应类中的数据成员(也称属性成员)和方法成员。数据成员是变量,方法成员是函数。类的基本结构是这样的:class 是定义类的关键字,后面跟上类的名称,类的名称要符合标识符的命名规则。花括号内是类的属性和方法定义。属性列表为多个属性的声明,方法列表为多个方法的声明。通常,属性声明放在方法声明之前。从语法角度来看,属性声明和方法声明的先后顺序没有关系。其实类可以没有任何成员,也可只有属性成员或方法成员。二、定义和使用类二、定义

3、和使用类 1.简单类的定义和使用 在使用类时应明确如何定义类、属性声明、方法声明、创建对象、使用属性和使用方法等操作,再根据该操作对类进一步熟悉。例如定义和使用简单类的代码如下:这段代码定义了 person 类,可发现它有一个私有属性$name、一个构造函数_construct()和一个公共方法 getName()。public 和 private 等关键字将在后面的内容中介绍。关于类的定义和使用,涉及到的关键知识点主要有四个,如图所示。(1)构造函数与构造函数与 new 关键字关键字 PHP 中的构造函数名称统一为_construct(),不同的类的构造函数的区别只在于函数参数和函数体中的内

4、容不同。通常构造函数的参数名称与类中的属性变量名称相同,方便阅读。在类的定义之外,使用 new 关键字创建类的对象,此时类的构造函数自动被调用,完成对象初始化操作。例如上面语句“$a=new person(“Mike”)”中,参数“Mike”作为构造函数$name 的值被赋值给对象属性$name,生成对象变量$a。(2)$this 关键字关键字$this 关键字代表当前对象,注意不是代表类。在类的内部,并不能直接使用属性名来访问属性,而应该用“$this-属性名”格式来访问属性,注意属性名前面没有$符号。(3)对象变量对象变量 对象变量指保存类的实例对象的变量,通过对象变量访问对象的属性和方法

5、。New 关键字创建的对象通常保存在对象中,便于使用。将一个对象赋值给变量实质是建立变量与对象的引用关系。再将对象变量赋给另一个变量,则多了一个到对象的引用。(4)访问对象的方法和属性)访问对象的方法和属性 对象的方法和属性用对象名加“-”进行访问,如$this-name 和$a-getName()2析构函数析构函数 析构函数与构造函数的作用相反。当对象的所有引用被删除、对象被显式销毁、执行exit()结束脚本或者脚本执行结束时,析构函数会被调用。通常在析构函数中释放对象使用的资源或填写对象注销日志。将对象变量赋值为 NULL,或用 unset()函数删除变量,均可删除变量到对象的引用。一般情

6、况下,用户不需要定义析构函数,PHP“垃圾回收”机制可以自动回收没有使用的对象占用的内存。要注意的是,类的定义中可以没有构造函数和析构函数,如果这样,PHP 会自动生成一个默认的构造函数和析构函数。3public、protected 和和 private public(公有)、protected(受保护)和 private(私有)关键字用于设置类成员的可访问性(也称可见性)。类的属性必须使用 public、protected 或 private 进行声明,在 PHP 3 和 PHP 4 中使用 var声明属性。PHP 5 仍保留了 var,var 声明的属性都是公有属性。类的方法在未声明可访问

7、性时,默认为公有。下面分别详细说明。(1)public:公有成员,在类的内部和外部均可访问。外部访问格式为“$变量名-成员名”,内部访问格式为“$this-成员名”。公有成员可被继承,访问规则也适用。(2)protected:保护成员,只能在类的内部通过“$this-成员名”访问。保护成员可被继承。(3)private:私有成员,与保护成员类似,私有成员也可以被继承,但对子类而言,父类的私有成员是不可见的,只能通过父类的方法进行访问。例如下面这段类的定义代码声明了三种类型的属性和三种类型的方法。class test public&var1;/声明公有属性 var1 protected&var2

8、;/声明保护属性 var2 private&var3;/声明私有属性 var3 public function func1()/声明公有方法 func1 /protected function func2()/声明保护方法 func2 /private function func3()/声明私有方法 func3 /class 是定义类的关键字,后面跟上类的名称,花括号内是类的属性和方法定义。类的属性和方法定义必须使用 public、protected 或 private 进行声明,分别代表公有、保护和私有,用于标识属性或方法的可访问性即可见性。4静态成员静态成员 在类的定义中可以使用 stat

9、ic 关键字声明静态属性和静态方法,请看下面类的定义:静态成员相当于存储在类中的全局变量和全局函数,可在任何位置访问。要注意的是,静态成员和常规成员不同,静态成员属于类,而不属于类的实例对象。在类外部,静态成员使用“类名:静态成员名”格式来访问,例如:特别注意,静态属性不能通过对象访问,静态方法可以通过对象访问静态属性不能通过对象访问,静态方法可以通过对象访问,例如下面语句:在类的内部,使用“self:静态成员名”格式访问静态成员。注意,在静态方法内部,不能使用$this 变量。5类的常量类的常量 在类中可使用 const 关键字声明常量。类的常量与类的静态成员类似,常量属于类,而不属于类的实

10、例变量。类的常量名区别大小写。在类外部用“类名:常量名”格式来访问,在内部用“self:常量名”格式访问。请看下面代码:第3行使用const关键字声明了一个常量constkey,其值等于字符串”PHP TEST”,然后定义了一个方法 getConstKey,在类的内部访问类的常量.在方法体外,首先使用new 关键字生成了一个类 test 的对象 a,然后对象 a 调用 getConstKey 方法获得常量 constkey 的值输出,即输出字符串”PHP TEST”.最后在类的外部直接访问类的常量,使用类名 test:constkey 访问并输出其值.三、三、类的继承类的继承 继承是面向对象的

11、一个重要特点。PHP 使用 extends 关键字实现继承,子类继承了父类的所有成员(私有成员不可见,但可通过方法访问)。其中,父类也可称为基类,子类也可称为扩展类或者派生类。例如使用类的继承,代码如下:从代码中可以看出,子类 subtest 虽然没有定义任何成员,但它继承了父类 test 的非私有成员。在创建子类的对象时,自动调用了继承自父类的构造函数。运行结果如图所示。四、四、重载重载 在子类中声明与父类同名的属性和方法称为重载。重载过后,在子类中可用“parent:父类成员名”格式来访问父类成员。五、五、抽象类抽象类 有时需要在类中声明一些未实现的方法,让这些方法在子类中实现,这就需要使

12、用到抽象方法和抽象类。PHP 中使用 abstract 关键字声明抽象方法,抽象方法只有函数原型,不能有函数体。可在一个类中声明多个抽象方法,只要有一个方法是抽象方法,类就必须使用abstract 关键字声明为抽象类。抽象类可以只包含抽象方法的类,也可以包含其他的属性和常规方法。不能创建抽象类的实例对象,否则会产生致命错误。六、六、接口接口 PHP 不允许多重继承,即一个子类只能有一个父类。接口提供了另一种选择,允许一个类实现(implements)多个接口。接口的声明方法与类相似,但接口只包含常量和函数原型,接口中的函数原型都必须用 abstract 声明为抽象方法。接口的相关内容我们不展开

13、讲解,有兴趣的同学可以自己找资料学习。七、常用类的操作七、常用类的操作 PHP 中对类或对象进行操作的内置方法和函数。1 _toString()方法 有时需要将对象转换为字符串,如使用 echo 或 print 输出,或者执行字符串运算等。在类中实现_toString()方法便可满足这些需求。2_autoload()函数函数 通常,自定义的函数、类是放置在独立的文件中,使用时执行文件即可。如果忘记了包含类,创建类的对象则会出错。也可在脚本中实现_autoload()方法,加载需要的类。当使用未加载的类时,类名作为参数自动调用_autoload()方法,从而保证脚本继续执行。3_set()、_g

14、et()和和_call()方法方法 在试图为类的不可访问属性赋值时会自动调用_set()方法,试图读取不可访问属性值时会自动调用_get()方法,在访问不可访问的方法时,会自动调用_call()方法。这里的“不可访问”指属性或方法属于非公有或者不存在。基于类的封装原则,非公有属性和方法都对外不可见。在类外部访问时会导致脚本出错,所以在类中使用私有属性定义对应的公有方法来设置和读取属性值。为大量的私有属性定义配套公有方法,增加了代码工作量,这时,就可使用_set()和_get()统一定义属性访问规则。4_clone()方法方法 在使用 clone()函数复制(克隆)对象时,类的_clone()方法被调用。对象复制通常需要一个对象的副本,副本对象一经复制,就应与原对象没有关系。所以要使用对象复制功能,需通过_clone()方法来实现。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教育专区 > 计算机类

若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理!

copyright@2008-2024 兔兜文库 网站版权所有

鲁公网安备37072502000182号  ICP备案号:鲁ICP备2021021588号-1  百度保障