PHP 简明教程

PHP 类与对象

1. 定义类

类是对象的蓝图或模板。在 PHP 中,使用 class 关键字来声明一个类,随后紧跟类的名称以及一对花括号 {},类的方法和属性都定义在花括号内。

1.1 语法示例

下面我们定义一个名为 Fruit 的类,它包含两个属性($name$color)以及两个方法(set_name()get_name()),用于设置和获取 $name 属性的值:

<?php
class Fruit {
  // 属性
  public $name;
  public $color;

  // 方法
  function set_name($name) {
    $this->name = $name;
  }
  function get_name() {
    return $this->name;
  }
}
?>
在类中,变量被称为属性(Properties),而函数被称为方法(Methods)。

2. 定义对象

类定义好之后,它只是一个静态的模板。要使用类,必须先将其实例化。类实例化后产生的具体实例被称为对象

我们可以从一个类中创建多个对象,每个对象都拥有该类定义的完整属性和方法,但它们的数据值是彼此独立的。

2.1 实例化对象

使用 new 关键字来创建一个对象:

代码示例:

<?php
class Fruit {
  public $name;
  public $color;

  function set_name($name) {
    $this->name = $name;
  }
  function get_name() {
    return $this->name;
  }
}

$apple = new Fruit();
$banana = new Fruit();
$apple->set_name('Apple');
$banana->set_name('Banana');

echo $apple->get_name();
echo "<br>";
echo $banana->get_name();
?>

3. $this 关键字

$this 关键字引用的是当前对象,它只能在类的方法内部使用。

3.1 为什么需要 $this?

看看下面的例子:

<?php
class Fruit {
  public $name;
  function set_name($name) {
    $this->name = $name;
  }
}
$apple = new Fruit();
$apple->set_name("Apple");
?>

在上面的 set_name() 方法中,$this->name 指的是当前对象(即 $apple)的属性 $name。而右边的 $name 是传递给该方法的局部参数。

3.2 外部修改 vs 内部修改

虽然通常建议通过方法来操作属性,但如果属性声明为 public,你也可以直接从类外部修改它:

代码示例:

<?php
$apple = new Fruit();
$apple->name = "Apple"; // 直接修改
?>

4. instanceof 关键字

如果您需要检查一个对象是否属于某个特定的类,可以使用 instanceof 关键字。

代码示例:

<?php
$apple = new Fruit();
var_dump($apple instanceof Fruit);
?>

如果对象是该类的实例(或该类的子类实例),instanceof 将返回 true,否则返回 false。这在处理复杂系统中的多态性或参数验证时非常有用。