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。这在处理复杂系统中的多态性或参数验证时非常有用。