PHP のオブジェクト指向カプセル化の詳細な説明

王林
リリース: 2023-08-11 11:02:01
オリジナル
1312 人が閲覧しました

PHP のオブジェクト指向カプセル化の詳細な説明

PHP オブジェクト指向カプセル化の詳細な解釈

カプセル化は、オブジェクト指向プログラミングの 3 つの主要な特徴の 1 つであり、データと操作をカプセル化することを指します。 data in クラスでは、特定の実装の詳細が外部プログラムから隠蔽され、外部インターフェイスが提供されます。 PHP では、カプセル化の概念は、アクセス修飾子 (public、protected、private) を使用してプロパティとメソッドのアクセス可能性を制御することによって実装されます。

まず、アクセス修飾子の役割を理解しましょう:

  1. public (パブリック): パブリックのプロパティとメソッドにはクラスの内部と外部からアクセスできます。
  2. protected (保護された): 保護されたプロパティとメソッドはクラスとサブクラス内でのみアクセスでき、外部プログラムから直接アクセスすることはできません。
  3. プライベート (プライベート): プライベートのプロパティとメソッドにはクラス内でのみアクセスでき、サブクラスも外部プログラムもそれらに直接アクセスできません。

次に、カプセル化の使用法を示す例を示します:

class Person {
    private $name;
    protected $age;
    public $gender;

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

    public function getName() {
        return $this->name;
    }

    protected function getAge() {
        return $this->age;
    }

    private function getGender() {
        return $this->gender;
    }

    public function displayInfo() {
        echo "Name: " . $this->getName() . "<br>";
        echo "Age: " . $this->getAge() . "<br>";
        echo "Gender: " . $this->getGender() . "<br>";
    }
}

// 创建一个Person对象并输出信息
$person = new Person("John", 25, "Male");
$person->displayInfo();
ログイン後にコピー

この例では、Person クラスには 3 つの属性があります: $name (プライベート)、$age (保護) )、$gender (パブリック)。これらのプロパティはコンストラクターを通じて初期化されます。プライベート属性 $name の場合、パブリック メソッド getName() を使用して値を取得します。保護された属性 $age の場合、保護されたメソッド getAge() を使用して値を取得します。パブリック属性 $gender の場合、外部プログラムは次のことができます。直接アクセスしてください。 displayInfo() メソッドでは、これら 3 つのメソッドを呼び出して、Person オブジェクトに関する情報を表示します。

カプセル化の利点は、オブジェクトの実装の詳細を隠し、制限された操作インターフェイスのみを外部に提供できることです。これにより、オブジェクトの内部状態が保護され、セキュリティとセキュリティが向上します。コードの保守性。

アクセス修飾子に加えて、PHP はより柔軟なカプセル化を実現するためのいくつかの特別なメソッドも提供します。

  1. __get(): 外部プログラムがプライベート プロパティにアクセスすると、__get が実行されます。 () メソッドが自動的に呼び出されます。
  2. __set(): 外部プログラムがプライベート プロパティに値を割り当てると、__set() メソッドが自動的に呼び出されます。
  3. __isset(): 外部プログラムが isset() 関数を使用してプライベート プロパティが設定されているかどうかを検出すると、__isset() メソッドが自動的に呼び出されます。
  4. __unset(): 外部プログラムが unset() 関数を使用してプライベート プロパティを null に設定すると、__unset() メソッドが自動的に呼び出されます。

以下は、これらの特別なメソッドの使用を示す例です:

class Book {
    private $title;

    public function __get($property) {
        if ($property === 'title') {
            return $this->title;
        }
    }

    public function __set($property, $value) {
        if ($property === 'title') {
            $this->title = $value;
        }
    }

    public function __isset($property) {
        if ($property === 'title') {
            return isset($this->title);
        }
    }

    public function __unset($property) {
        if ($property === 'title') {
            $this->title = null;
        }
    }
}

$book = new Book();
$book->title = "PHP Programming";
echo $book->title . "<br>";
echo isset($book->title) ? "Yes" : "No" . "<br>";
unset($book->title);
echo isset($book->title) ? "Yes" : "No" . "<br>";
ログイン後にコピー

この例では、Book クラスの $title 属性は、__get() および __get() を介してプライベートです。 __set() メソッドを使用して、この属性の値を取得および設定します。 __isset() メソッドは属性が設定されているかどうかを検出するために使用され、__unset() メソッドは属性を null に設定するために使用されます。デモからわかるように、パブリック プロパティにアクセスするのと同じように、オブジェクトのプロパティ名を通じてプライベート プロパティの値を直接取得および設定できます。

要約すると、カプセル化はオブジェクト指向プログラミングに不可欠な機能の 1 つであり、オブジェクトの内部状態を保護し、コードのセキュリティと保守性を向上させることができます。アクセス修飾子と特別なメソッドを使用することで、プロパティとメソッドのアクセシビリティを柔軟に制御し、実装の詳細を非表示にし、限定されたインターフェイスのみを外部に提供することができます。カプセル化の概念と使用法をマスターすることは、高品質のオブジェクト指向コードを作成するために非常に重要です。

以上がPHP のオブジェクト指向カプセル化の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート