首页 > 编程笔记 > PHP笔记 阅读:4

PHP类的定义和使用(附带实例)

随着 PHP 的不断发展,PHP 对面向对象编程的支持也越来越完善,使得 PHP 能够处理更多复杂的需求。对 PHP 开发人员来说,PHP 面向对象编程是必备的重要技能之一。

面向对象的思想力图使程序对事物的描述与该事物在现实中的形态一致,为了做到这一点,面向对象思想提出了两个概念,即类和对象。

在面向对象中,类(class)是对某一类事物的抽象描述,类中包含该类事物的一些基本特征。对象(object)用于表示现实中该事物的个体。对象是根据类创建的,类是对象的模板,通过一个类可以创建多个对象。

为了方便读者理解,下面通过下图所示演示类与对象的关系:


图 1 类与对象的关系

在图 1 中,共有商品类、水果类和文具类,其中水果类和文具类都有“名称”和“价格”两个属性。此外,水果类还拥有“产地”属性,文具类还拥有“型号”属性。苹果、香蕉是水果类的对象,铅笔是文具类的对象。从水果与苹果、香蕉的关系和文具与铅笔的关系,可以看出类与对象之间的关系。

PHP类的定义

PHP 中,类由 class 关键字、类名和类成员组成。定义类的语法格式如下:
class 类名
{
   类成员
}
在上述语法格式中,“{}”中的内容是类成员。

在定义类时,类名需要遵循以下规则:
若想要使用类的功能,还需要根据类创建对象,这个操作称为类的实例化。通过类的实例化创建的对象称为类的实例(instance)。

PHP类的使用(实例化)

PHP 中使用 new 关键字创建类的实例,语法格式如下:
$对象名 = new 类名([参数1, 参数2, …]);
在上述语法格式中:
下面演示定义类和实例化类,具体代码如下:
class Person              // 定义Person类
{
}
$person = new Person();      // 实例化Person类
var_dump($person);             // 输出结果:object(Person)#1 (1) {}
上述代码定义了一个 Person 类,该类是一个空类。创建 $person 对象后,使用 var_dump() 函数输出 $person 对象,可以从输出结果中查看对象的类型。

PHP instanceof运算符

PHP 中的 instanceof 运算符可以判断对象是不是某个类的实例,具体语法格式如下:
$对象名 instanceof 类名
在上述语法格式中,instanceof 左侧是某个类的实例,右侧是类名。如果判断成立,判断结果为 true;否则判断结果为 false。需要注意的是,对于一个子类对象,如果 instanceof 右侧是父类,则判断结果也为 true。

下面演示 instanceof 运算符的使用,示例代码如下:
class Other                           // 定义Other类
{
}
class Person                          // 定义Person类
{
}
$person = new Person();
var_dump($person instanceof Person);  // 输出结果:bool(true)
var_dump($person instanceof Other);   // 输出结果:bool(false)
在上述代码中,定义了 Other 类和 Person 类,第 8 行代码用于判断对象 $person 是否为 Person 类的实例,第 9 行代码用于判断对象 $person 是否为 Other 类的实例。

从输出结果可以看出,$person 是 Person 类的实例,不是 Other 类的实例。

PHP类成员

类成员定义在类名后的“{}”中。类成员包括属性和方法:
在类中定义类成员的语法格式如下:
class 类名
{
    访问控制修饰符 $属性名 = 值;       // 定义属性
    访问控制修饰符 function 方法名([参数1, 参数2, …])  // 定义方法
    {
        方法体
    }
}
在上述语法格式中,“$属性名=”后面的值可以省略,如果省略属性的值,属性的默认值为 NULL。访问控制修饰符用于控制类成员是否允许被外界访问,默认使用 public。

定义类成员后,在创建类的对象时,程序会依据类成员创建对象成员。对象成员又称为实例成员。使用对象成员访问符“->”可以访问对象成员,具体语法格式如下:
$对象名->属性名;       // 访问属性
$对象名->方法名();     // 访问方法(调用方法)
在上述语法格式中,访问方法时,方法名后面加上小括号表示调用。由于方法和函数类似,所以习惯上将访问方法称为调用方法。

下面演示类成员的使用。定义 Person 类,在类中定义属性 $name 和方法 speak(),实例化 Person 类后访问对象的属性和方法,具体代码如下:
class Person
{
    public $name = '未命名';   // 定义属性
    public function speak()   // 定义方法
    {
        echo 'The person is speaking.';
    }
}
$person = new Person();      // 实例化Person类
echo $person->name;          // 获取属性值,输出结果:未命名
$person->name = '张三';       // 修改属性的值
echo $person->name;          // 获取属性值,输出结果:张三
$person->speak();            // 输出结果:The person is speaking.
在上述代码中,第 3 行代码用于为 $name 属性设置初始值;第 10 行代码用于访问属性 $name;第 11 行代码用于将属性 $name 的值修改为张三;第 13 行代码用于调用 speak() 方法。

相关文章