PHP OOP-类和对象
类是对象的模板,而对象是类的实例。
OOP案例
假设我们有一个名为Fruit的类。水果可以具有名称,颜色,重量等属性。我们可以定义变量$ name,$ color和$ weight来保存这些属性的值。
创建单个对象(苹果,香蕉等)后,它们将从类继承所有属性和行为,但是每个对象的属性值都不同。
定义一个班级
通过使用
class
关键字,后跟类的名称和一对花括号({})。它的所有属性和方法都放在花括号内:
句法
<?php class Fruit { // code goes here... } ?>
下面我们声明一个名为Fruit的类,该类由两个属性($ name和$ color)以及两个用于设置和获取$ name属性的方法set_name()和get_name()组成:
例
<?php class Fruit { // Properties public $name; public $color; // Methods function set_name($name) { $this->name = $name; } function get_name() { return $this->name; } } ?>
注意: 在类中,变量称为属性,函数称为方法!
定义对象
没有对象,什么都不是!我们可以从一个类创建多个对象。每个对象都具有该类中定义的所有属性和方法,但是它们将具有不同的属性值。
类的对象是使用
new
关键词。
在下面的示例中,$ apple和$ banana是Fruit类的实例:
例
<?php class Fruit { // Properties public $name; public $color; // Methods 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 { // Properties public $name; public $color; // Methods 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"); ?>
2.在类之外(通过直接更改属性值):
例
<?php class Fruit { public $name; } $apple = new Fruit(); $apple->name = "Apple"; ?>
PHP-instanceof
你可以使用
instanceof
检查对象是否属于特定类的关键字:
例
<?php $apple = new Fruit(); var_dump($apple instanceof Fruit); ?>