ホームページ >バックエンド開発 >PHPチュートリアル >PHPオブジェクトにおけるクラスの継承アクセスタイプ制御の詳細説明

PHPオブジェクトにおけるクラスの継承アクセスタイプ制御の詳細説明

黄舟
黄舟オリジナル
2017-07-02 11:32:081117ブラウズ

アクセス制御のタイプを使用すると、開発者は修飾子を使用してクラス内のメンバーへのアクセスを制限できます。これは PHP5 の新機能であり、OOP 言語の重要な機能です。ほとんどの OOP 言語はすでにこの機能をサポートしています。 PHP5 は次の 3 つのアクセス修飾子をサポートしており、そのうちの 2 つはクラスのカプセル化で導入されています。ここでまとめると、アクセス制御修飾子には、public (パブリック、デフォルト)、プライベート (プライベート)、プロテクト (保護) が含まれます。それらの機能とそれらの違いを次の表に示します。

PHPオブジェクトにおけるクラスの継承アクセスタイプ制御の詳細説明

①パブリックアクセス修飾子 public

この修飾子を使用すると、クラス内のメンバーにはアクセス制限がなく、すべての外部メンバーがアクセスできます。 PHP5 より前のすべてのバージョンでは、PHP のクラスのメンバーは public です。

②プライベートアクセス修飾子private

クラス内のメンバーがプライベートとして定義されている場合、同じクラス内のすべてのメンバーに対するアクセス制限はありませんが、クラスの外部コードは変更できず、操作することさえできません。このクラスのサブクラスでは、プライベートの変更されたメンバーにはアクセスできません。コードは次のとおりです。

<?php
    //声明一个类作为父类使用,将它的成员都声明为私有的
    class MyClass {
        private $var1=100;
 
        private function  printHello(){
            echo "hello<br>";     
        }
    }
 
    //声明一个Myclass类的子类师徒访问父类中的私有成员
    class MyClass2 extends MyClass{
        function useProperty(){
            echo "输出从父类继承过来的成员属性值".$this ->var1."<br>";
            $this ->printHello();
        }
    }
 
    $subObj = new MyClass2();
    $subObj -> useProperty();       //调用子类对象中的方法实现对父类私有成员的访问
?>

上記のコードでは、クラス MyClass が宣言され、クラス内でプライベート メンバー属性とプライベート
メンバー メソッド が宣言され、クラス MyClass を継承するクラス MyClass2 が宣言されています。サブクラス MyClass2 の親クラスのプライベート メンバーにアクセスします。ただし、親クラスのプライベートメンバーは自分のクラスでしか使用できないため、アクセスエラーが発生します。

③ 保護されたアクセス修飾子 protected

は、保護されたメンバーとして変更され、このクラスのサブクラスおよびサブクラスのサブクラスへのアクセス権を持ち、プロパティとメソッドを読み書きできます。ただし、このクラスの外部コードからはアクセスできません。また、このサブクラスの外部コードには、そのプロパティとメソッドに対する追加のアクセス許可がありません。上記例の親クラスのアクセス権をprotectedに変更することで、サブクラス内では親クラスのメンバーにアクセスできるが、クラス外ではアクセスできないため、オブジェクトのカプセル化の目的も達成できます。コードは次のとおりです。

<?php
    class MyClass {
        protected $var1=100;
 
        protected function  printHello(){
            echo "hello<br>";     
        }
    }
 
    //声明一个Myclass类的子类师徒访问父类中的保护成员
    class MyClass2 extends MyClass{
        function useProperty(){
            echo "输出从父类继承过来的成员属性值".$this ->var1."<br>";
            $this ->printHello();
        }
    }
 
    $subObj = new MyClass2();
    $subObj -> useProperty();       //调用子类对象中的方法实现对父类私有成员的访问
 
    echo $subObj ->var1;         //试图访问类中受保护的成员,结果出错
?>
上記の例では、クラス MyClass のメンバーは protected 修飾子を使用して protected に設定されており、サブクラスで直接アクセスできます。ただし、サブクラス外の保護された変更されたメンバーにアクセスするとエラーになります。


以上がPHPオブジェクトにおけるクラスの継承アクセスタイプ制御の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。