购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

6.1 类与对象

类(class)与对象(object)是面向对象编程中最基本的两个概念。类可以看作是一种复杂的数据类型,其中定义了数据(属性)和数据的操作(方法)。对象是某个类类型的变量,称为类的实例。

本书代码中,自定义的类都以小写字母t开头,表示这是一个类型(type),在t字母之后,使用单词首字母大写的形式,如tAuto、tAutoFactory等。

下面,首先了解如何在PHP中定义类和对象。

6.1.1 定义类和对象

PHP中定义类时,需要使用class关键字,类的成员主要包括属性和方法,它们的访问级别包括:

● public(公共的),提供给外部代码调用的成员。

● private(私有的),只在本类中使用的成员。

● protected(受保护的),只能在本类或子类中访问的成员。6.6节将介绍相关应用。

类的成员中,属性用来存放数据,可以使用变量定义;方法定义了数据的操作,通过函数实现。下面的代码创建了一个名为tAuto的类(/demo/tAuto.php)。

代码中定义了两个属性,分别是$model和$doors,表示车辆型号和车门数量;drive()方法会显示车辆行驶信息。请注意,定义方法时需要使用function关键字。此外,在drive()方法中通过$this引用了model属性,这里的$this表示类的当前实例,即当前对象。

本例中定义的三个成员都使用了public关键字,表示它们都是公共成员,可以在外部通过对象调用。

下面的代码在/index.php文件中测试tAuto类的使用。

    <?php
    require_once $_SERVER["DOCUMENT_ROOT"]."/demo/tAuto.php";

    $auto = new tAuto();
    $auto->model = "X2019";
    $auto->drive();
    ?>

代码中,首先使用require_once语句引用tAuto.php文件,然后使用“new tAuto()”语句创建一个tAuto类的实例,并赋值给$auto对象。其次将$auto对象的model属性设置为“X2019”,最后调用$auto对象的drive()方法。代码执行结果见图6-1。

图 6-1

示例中,创建对象使用了new关键字,类名后的一对圆括号表示调用默认的无参数构造函数,稍后讨论。

创建对象后,通过->运算符调用实例中的属性和方法。请注意,在调用属性时,对象使用$符号,属性名不需要使用$符号。

6.1.2 对象类型判断

判断一个对象是否为某个类的实例,可以使用instanceof运算符,其运算结果为bool类型,如下面的代码。

    <?php
    require_once $_SERVER["DOCUMENT_ROOT"]."/demo/tAuto.php";

    $auto = new tAuto();
    $x = 10;
    var_dump($auto instanceof tAuto);
    var_dump($x instanceof tAuto);
    ?>

代码执行结果见图6-2。其中,$auto对象是tAuto类的实例,但$x变量不是。

图 6-2

此外,还可以使用get_class()函数获取对象所属类的名称,如下面的代码。

    <?php
    require_once $_SERVER["DOCUMENT_ROOT"]."/demo/tAuto.php";

    $auto = new tAuto();
    echo get_class($auto);
    ?>

执行代码会显示tAuto。

在PHP 8中,还可以使用$obj::class属性获取对象所属类的名称,如下面的代码。

    <?php
    require_once $_SERVER["DOCUMENT_ROOT"]."/demo/tAuto.php";

    $auto = new tAuto();
    echo $auto::class;
    ?>

在PHP 8环境下执行代码会显示tAuto。

6.1.3 使用方法读写属性数据

为什么要使用方法操作属性数据呢?一个重要的原因是,可以对数据进行检查,确保设置了正确的数据,如车门的数量不能为负数,也不能太多。下面的代码(/demo/tAuto.php)将doors属性设置为私有的(private),然后使用方法来访问它的值。

代码中,setDoors()方法用于设置车门数量,当参数的值为0到5时,保存到$doors属性中,否则设置为4;getDoors()方法用于返回车门数量,这里直接返回$doors属性值。下面的代码在/index.php文件中测试getDoors()和setDoors()方法的使用。

    <?php
    require_once $_SERVER["DOCUMENT_ROOT"]."/demo/tAuto.php";

    $auto = new tAuto();
    $auto->setDoors(10);
    echo $auto->getDoors(),"<br>";
    $auto->setDoors(2);
    echo $auto->getDoors();
    ?>

代码执行后会显示4和2。 WeT4hTES8VSS2F18ysjWHq1empJjTE+KnV1ov8jPU2gcXvsaChNpAxKqD+oYaw1t

点击中间区域
呼出菜单
上一章
目录
下一章
×