阿里云新用户优惠

第十章 PHP面向对象

一、面向对象的介绍 1、类和对象的发展(从面向过程到面向对象) 最初的计算机语言只有基本变量(类似基本数据类型),用来保存数据。但是数据多了怎么办?成千上万的数据怎么处理?于是有了数组的概念,通过数组将这同类型的数据进行组织。后来,数据不仅多且复杂了,而且对数据的操作(指的就是函数)也频繁了,但结构体只包含了数据,没有包含对数据操作的方法,于是类和对象产生了。也就是说,面向过程的数据和方法是分离的,而面向对象的数据和方法集成到了一起,便于扩展。 对于描述复杂的事物,为了从宏观上把握、从整体上合理分析,需要使用面向对象的思路来分析整个系统。但是,具体到微观操作,可能需要面向过程的思路去处理。如开车(简单事物),可以用一系列线性过程来描述;但是造车(复杂事物),就无法使用简单的线性思维来解决了。这时可以使用面向对象的思想,将造车看作车壳、发动机、车轮等对象的组合,从宏观上把握造车过程,而不是拘泥于从哪个小零件开始造起。 面向对象和面向过程的总结: 都是解决问题的思维方式,都是代码组织的方式。 解决简单问题可以使用面向过程。 解决复杂问题:宏观上使用面向对象把握,微观处理上仍然是面向过程。 面向对象的思考方式:遇到复杂问题,先从问题中找名词,然后确立这些名词哪些可以作为类,再根据问题需求确定类的属性和方法,以此来理清类之间的关系。 2、面向对象的基本特征 面向对象编程具有封装、继承、多态三大特性,它们迎合了编程中注重代码重用性、灵活性和可扩展性的需要,奠定了面向对象在编程中的地位。 封装 封装就是将一个类的使用和实现分开,只保留有限的接口(方法)与外部联系。对于用到该类的开发人员,只要知道这个类该如何使用即可,而不用去关心这个类是如何实现的。这样做可以让开发人员更好地把精力集中起来专注于别的事情,同时也避免了程序之间的相互依赖而带来的不便。 例如,在使用计算机时,我们并不需要将计算机拆开了解它每个部件的具体用处,只需要按下电源键就能将计算机启动,这就体现了封装的好处。 继承 继承就是派生类(子类)自动继承一个或多个基类(父类)中的属性与方法,并可以重写或添加新的属性或方法。继承这个特性简化了对象和类的创建,增加了代码的重用性。 例如,已经定义了 A 类,接下来准备定义 B 类,而 B 类中有很多属性和方法与 A 类相同,那么就可以用 B 类继承 A 类,这样就不用再在 B 类中定义 A 类中已有的属性和方法,从而可以在很大程度上提高程序的开发效率。 继承分为单继承和多继承,PHP 目前只支持单继承,也就是说一个子类有且只有一个父类。 多态 对象的状态是多变的。一个对象相对于同一个类的另一个对象来说,它们拥有的属性和方法虽然相同,但却可以有着不同的状态。另外,一个类可以派生出若干个子类,这些子类在保留了父对象的某些属性和方法的同时,也可以定义一些新的方法和属性,甚至于完全改写父类中的某些已有的方法。多态增强了软件的灵活性和重用性。 二、创建类、属性和方法 1、定义类 在 PHP 中,可以使用 class 关键字加类名的方式定义一个类,然后用大括号{ }将在类体中定义类的属性和方法包裹起来,类的语法格式如下: class 类名{} 2、成员属性 在类中直接声明的变量称为成员属性(也可以称为成员变量),可以在类中声明多个变量,即对象中可以有多个成员属性,每个变量都存储对象不同的属性信息。语法格式如下: 访问权限修饰符 属性名称 = 属性值; 成员属性的类型可以是 PHP 中的标量类型和复合类型,所以也可以是其他类实例化的对象,但在类中使用资源和空类型是没有意义的。 前面我们绍过,声明变量时不需要任何关键字修饰,但是在类中声明成员属性时,变量前面一定要使用一个关键字来修饰,例如 public、private,static 等,但这些关键字修饰的变量都具有一定的意义。如果不需要有特定意义的修饰,可以使用“var”关键字,一旦成员属性有其他的关键字修饰就需要去掉“var”。 常用访问权限修饰符及其含义如下所示: public:公共的,在类的内部、子类中或者类的外部都可以使用,不受限制; protected:受保护的,在类的内部和子类中可以使用,但不能在类的外部使用; private:私有的,只能在类的内部使用,在类的外部或子类中都无法使用。 <?php class Preson{ public $name; public $age = 19; private $gender = "男"; } //外部调用 $p = new Preson(); echo $p->age; echo $p->gender; ?

阅读更多...