PHP -封装 (Encapsulation)

封装是面向对象编程(OOP)的基本原则之一。它指的是将数据与操作这些数据的方法捆绑在一起。在PHP中,可以通过使用类和访问修饰符(如public、private和protected)来实现封装。本教程将引导您了解PHP中封装的基础知识,从公共成员开始,然后转向私有成员,最后介绍受保护的成员。

PHP - Encapsulation

公共成员 (Public Members)

公共成员可以从任何地方访问,无论是类内部还是外部。它们使用public关键字声明。以下是一个具有公共成员的简单类的示例:

class Car {
public $color;

public function setColor($color) {
$this->color = $color;
}

public function getColor() {
return $this->color;
}
}

$myCar = new Car();
$myCar->setColor("红色");
echo "我的车是 " . $myCar->getColor() . "。" ; // 输出:我的车是红色。

在这个例子中,我们有一个Car类,它有一个公共属性$color和两个公共方法setColor()getColor()。我们可以轻松地从类外部设置和获取汽车的颜色。

私有成员 (Private Members)

私有成员只能在定义它们的类内部访问。它们使用private关键字声明。以下是一个具有私有成员的类的示例:

class BankAccount {
private $balance;

public function __construct($initialBalance) {
$this->balance = $initialBalance;
}

public function deposit($amount) {
if ($amount > 0) {
$this->balance += $amount;
}
}

public function getBalance() {
return $this->balance;
}
}

$myAccount = new BankAccount(100);
$myAccount->deposit(50);
echo "我的账户余额是 " . $myAccount->getBalance() . "。" ; // 输出:我的账户余额是150。

在这个例子中,我们有一个BankAccount类,它有一个私有属性$balance和两个公共方法deposit()getBalance()$balance属性不能直接从类外部访问,但我们可以使用deposit()方法操作它,并使用getBalance()方法检索其值。

受保护的成员 (Protected Members)

受保护的成员可以在定义它们的类内部以及任何子类中访问。它们使用protected关键字声明。以下是一个具有受保护成员的类的示例:

class Animal {
protected $name;

public function __construct($name) {
$this->name = $name;
}
}

class Dog extends Animal {
public function bark() {
echo "汪!我是 " . $this->name . "。";
}
}

$myDog = new Dog("Buddy");
$myDog->bark(); // 输出:汪!我是Buddy。

在这个例子中,我们有一个Animal类,它有一个受保护的属性$nameDog类扩展了Animal类,并且可以访问$name属性,因为它是受保护的。我们可以在Dog类中使用$name属性来实现bark()方法。

结论

封装是OOP中一个至关重要的概念,它通过限制直接访问来帮助维护数据的完整性。通过使用public、private和protected这样的访问修饰符,您可以控制数据如何被访问和修改。理解封装将帮助您在PHP和其他OOP语言中编写更健壮、可维护的代码。

Credits: Image by storyset