PHP開発では、許可制御は、プログラムのセキュリティとモジュラー設計を実装するためのコアメカニズムの1つです。許可修飾子を合理的に使用することにより、クラスメンバーのアクセス範囲を効果的に制限し、コードの乱用を回避し、プログラムの保守性を改善できます。
PHPは、主に5つの許可修飾子を提供します。以下は個別に説明され、サンプルコードと組み合わせて説明されます。
パブリックは、パブリックメンバーを宣言するために使用され、内部、外側、サブクラス内で自由にアクセスできます。これはデフォルトのアクセス制御方法であり、広く呼ばれる必要がある方法またはプロパティに適しています。
class Person {
public $name;
public function sayHello() {
echo 'Hello, my name is ' . $this->name;
}
}
$person = new Person();
$person->name = 'Tom';
$person->sayHello();
保護されたものは、保護されたメンバーを定義するために使用されます。保護されたメンバーは、継承されたサブクラス内または継承されたサブクラスでのみアクセスでき、クラスの直接アクセスできません。
class Animal {
protected $name;
protected function getName() {
return $this->name;
}
}
class Cat extends Animal {
public function setName($name) {
$this->name = $name;
}
public function sayHello() {
echo 'Hello, I am ' . $this->getName();
}
}
$cat = new Cat();
$cat->setName('Tom');
$cat->sayHello();
プライベートで宣言されたメンバーは、現在のクラスでのみ使用でき、サブクラスでアクセスすることはできません。これは、クラスの内部実装の詳細でよく使用される最も厳格なアクセス制御方法です。
class Person {
private $name;
private function getName() {
return $this->name;
}
public function sayHello() {
echo 'Hello, my name is ' . $this->getName();
}
}
$person = new Person();
$person->name = 'Tom'; // ここにエラーが報告されます
$person->sayHello();
ファイナルは、クラスが継承されたり、上書きされたりするのを防ぐために使用されます。最終的に宣言された方法は、サブクラスでオーバーライドすることはできず、変更を望まないコアロジックに適しています。
class Animal {
final public function eat() {
echo 'I am eating';
}
}
class Cat extends Animal {
public function eat() { // ここにエラーが報告されます
echo 'I am not eating';
}
}
$cat = new Cat();
$cat->eat();
要約は、抽象クラスと抽象的な方法を定義するために使用されます。抽象クラスはインスタンス化することはできません。サブクラスによって継承され、すべての抽象的なメソッドを実装する必要があります。
abstract class Animal {
abstract public function eat();
}
class Cat extends Animal {
public function eat() {
echo 'I am eating fish';
}
}
$cat = new Cat();
$cat->eat();
PHP Access Control Modifiersを理解し、合理的に使用することは、堅牢で安全で拡張可能なコードを記述するための基礎です。各修飾子には独自の特定の目的があります。クラスと方法を作成する場合、開発者は、コードのカプセル化とセキュリティを強化するために、実際のニーズに応じて適切なアクセスレベルを選択する必要があります。