PHP OOP - 类和对象
类是对象的模板,而对象是类的实例。
OOP 案例
假设我们有一个名为 Fruit
的类。Fruit
可以有诸如名称、颜色、重量等属性。我们可以定义变量如 $name
、$color
和 $weight
来保存这些属性的值。
当创建单个对象(如 apple、banana 等)时,它们继承类的所有属性和行为,但每个对象的属性值都会有所不同。
定义类
类是使用 class
关键字定义的,后面跟着类的名称和一对大括号({}
)。它的所有属性和方法都放在大括号内:
语法
<?php class Fruit { // 在这里编写代码... } ?>
下面我们声明一个名为 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; } } ?>
注意:在类中,变量被称为属性,函数被称为方法!
定义对象
没有对象,类就毫无用处!我们可以从类中创建多个对象。每个对象都具有类中定义的所有属性和方法,但它们的属性值将不同。
请使用 new
关键字创建类的对象。
在下面的例子中,$apple
和 $banana
是 Fruit
类的实例:
实例
<?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(); ?>
在下面的例子中,我们进一步向 Fruit
类添加了两个方法,用于设置和获取 $color
属性的值:
实例
<?php class Fruit { // 属性 public $name; public $color; // 方法 function set_name($name) { $this->name = $name; } function get_name() { return $this->name; } function set_color($color) { $this->color = $color; } function get_color() { return $this->color; } } $apple = new Fruit(); $apple->set_name('Apple'); $apple->set_color('Red'); echo "Name: " . $apple->get_name(); echo "<br>"; echo "Color: " . $apple->get_color(); ?>
PHP - $this 关键字
$this
关键字引用当前对象,并且仅在方法内部可用。
请看下面的例子:
实例
<?php class Fruit { public $name; } $apple = new Fruit(); ?>
那么,我们可以在哪里更改$name属性的值呢?有两种方法:
1. 在类内部(通过添加 set_name()
方法并使用 $this
):
实例
<?php class Fruit { public $name; function set_name($name) { $this->name = $name; } } $apple = new Fruit(); $apple->set_name("Apple"); echo $apple->name; ?>2. 在类外部(通过直接更改属性值):
实例
<?php class Fruit { public $name; } $apple = new Fruit(); $apple->name = "Apple"; echo $apple->name; ?>
PHP - instanceof
您可以使用 instanceof
关键字来检查一个对象是否属于特定的类:
实例
<?php $apple = new Fruit(); var_dump($apple instanceof Fruit); ?>