PHP - 封筒化(Encapsulation)

封筒化はオブジェクト指向プログラミング(OOP)の基本的な原則の一つです。これはデータとそのデータを操作するメソッドをバンドルすることを指します。PHPでは、クラスとpublic、private、protectedなどのアクセス修飾子を使用して封筒化を実現できます。このチュートリアルでは、PHPにおける封筒化の基本をガイドします。まずpublicメンバーから始め、privateメンバー、最後にprotectedメンバーについて説明します。

PHP - Encapsulation

Public メンバー

Publicメンバーはクラスの内外からどこからでもアクセスできます。publicキーワードを使用して宣言されます。以下はpublicメンバーを持つシンプルなクラスの例です:

class Car {
public $color;

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

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

$myCar = new Car();
$myCar->setColor("red");
echo "My car is " . $myCar->getColor() . "."; // 出力: My car is red.

この例では、Carクラスがpublicプロパティ$colorと2つのpublicメソッドsetColor()getColor()を持っています。クラスの外から簡単に車の色を設定および取得できます。

Private メンバー

Privateメンバーは定義されたクラス内でのみアクセスできます。privateキーワードを使用して宣言されます。以下は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 "My account balance is " . $myAccount->getBalance() . "."; // 出力: My account balance is 150.

この例では、BankAccountクラスがprivateプロパティ$balanceと2つのpublicメソッドdeposit()getBalance()を持っています。$balanceプロパティはクラスの外から直接アクセスできないが、deposit()メソッドを使用して操作し、getBalance()メソッドを使用して値を取得できます。

Protected メンバー

Protectedメンバーは定義されたクラス内および任意のサブクラス内でアクセスできます。protectedキーワードを使用して宣言されます。以下はprotectedメンバーを持つクラスの例です:

class Animal {
protected $name;

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

class Dog extends Animal {
public function bark() {
echo "Woof! I am " . $this->name . ".";
}
}

$myDog = new Dog("Buddy");
$myDog->bark(); // 出力: Woof! I am Buddy.

この例では、Animalクラスがprotectedプロパティ$nameを持っています。DogクラスはAnimalクラスを継承し、protectedプロパティ$nameにアクセスできます。Dogクラス内で$nameプロパティを使用してbark()メソッドを実装できます。

結論

封筒化はOOPにおける重要な概念で、データへの直接アクセスを制限することでデータの整合性を保つのに役立ちます。public、private、protectedなどのアクセス修飾子を使用することで、データのアクセスと修正を制御できます。封筒化を理解することで、PHPや他のOOP言語でより強固でメンテナンスしやすいコードを書くことができます。

Credits: Image by storyset