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