キーワードは基本的に、特定の目的のためにあらゆるプログラミング言語で予約されている特別な単語のセットです。これらはコマンドまたはパラメータのいずれかであり、変数名のように一般的に使用することはできません。 PHP で保護されたものは、PHP を含むすべての言語で事前定義されており、予約名とも呼ばれます。
広告 このカテゴリーの人気コース PHP 開発者 - 専門分野 | 8コースシリーズ | 3 つの模擬テスト無料ソフトウェア開発コースを始めましょう
Web 開発、プログラミング言語、ソフトウェア テスト、その他
PHP には 5 種類のアクセス修飾子があります:
この記事では、保護されたアクセス修飾子のみに焦点を当てます。変数とは別に、保護されたキーワードは、メソッド/関数およびプロパティを保護として宣言するためにも使用されます。明示的に指定しない限り、すべての変数とメソッドはデフォルトでパブリックになります。保護された変数は、その変数へのアクセスが宣言されているクラスに制限されるため、それぞれの変数またはメソッドの可視性が低下します。保護されたアクセス修飾子はクラスに適用できません。
ただし、親クラスから継承されたサブクラスから呼び出すことはできます。したがって、「protected」キーワードを接頭辞として付けることで、必要なメソッドまたは変数を保護されたものとして宣言できます。
<?php //declaration of protected variable protected $<variable_name> = value; //declaration of protected property protected $proc = 'protected property'; //declaration of protected function protected function function_name(){ //PHP code goes here } ?>
ここでは、protected キーワードを使用して変数名と関数名の両方を宣言していることがわかります。
PHP における protected 修飾子の働き: private アクセス修飾子と同様に、クラス外部のクラス関数や変数の使用とアクセスを制限するために protected を使用することもできます。ただし、プライベート変数から保護される場合の 1 つの例外は、サブクラス内の親クラスからの継承を通じてアクセスできることです。
以下の簡単な例を使用して、保護された修飾子の使用法と動作を詳しく理解してみましょう:
コード:
<?php // Declaration of Main class class Math { protected $a = 30; protected $b = 10; // Declaration of division function function division() { echo $div=$this->a/$this->b; echo "\n"; } protected function multiply() { echo $mul=$this->a*$this->b; echo "\n"; } } // Declaration of child class addn inherited from above class class addn extends Math { // Declaration of addition function function addition() { echo $division=$this->a+$this->b; } } $obj= new addn; $obj->division(); $obj->addition(); $obj->multiply(); ?>
出力:
保護されたメソッドを呼び出そうとしている行 29 にコメントを付けた後
上記の例では、加算、除算、乗算などのさまざまな数学演算を紹介しています。まず、アクセス修飾子を付けずに Division() 関数を宣言しています。したがって、デフォルトでは、これはパブリックであり、変数 a と b の両方に対して実行している除算値は、オブジェクトを作成して関数を呼び出すときに出力に表示されます。しかし、保護された関数 multiply() を呼び出そうとすると、保護されたメソッドを呼び出すことができないというエラー インライン 34 が表示されます。
ここで、示されているように、継承を介して保護されたメソッドを呼び出して値を取得できます。ここで、子クラスは親クラス Math から継承されているため、保護された変数 a と b をエラーなく呼び出すことができます。
コード:
<?php class Animal { // Declaration of protected variable $animal protected $animal = array("Dog", "Cat", "Cow"); // Declaration of protected function for Animal description protected function getDescription($animal) { if($animal == "Dog") { echo "Dogs are the most loyal animals"; } else if($animal == "Cat") { echo "Cats are very smart"; } else if($animal == "Cow") { echo "Cows are worshipped in India"; } } } // Declaration of sub class of above Animal class class Dog extends Animal { protected $animal = "Dog"; // Declaration of public function to print dog's description public function getDogDescription() { // Here we call the protected getDescription() method of parent class Animal $this->getDescription($this->animal); } } // Creating an object of class Animal $animal = new Animal(); // Creating an object of subclass Dog $dog = new Dog(); /* Trying to access protected variables and methods */ echo $animal->animal; // Cannot be accessed $animal->getDescription("Dog"); // Cannot be accessed echo $dog->animal; // Cannot be accessed /* We can call getDogDescription method, in which we are calling a protected method of Animal class */ $dog->getDogDescription(); ?>
出力:
34 行目のコメント後
行 35 と 36 をコメントした後
この例では、最初にメインの親クラス Animal を宣言し、保護された変数を $animal として初期化します。これは 3 つの異なる動物の名前を含む配列です。次に、配列内の各動物に一意の説明を与える保護された関数も宣言しています。
保護された変数にはサブクラスを使用してアクセスできるため、ここでは親クラス Animal から別のサブクラス Dog を作成します。また、パブリック関数がどこからでもアクセスできることを示すために、変数 Dog の説明を出力するパブリック関数を宣言します。
次に、Animal クラスと Dog クラスの両方のオブジェクトを作成し、保護されているそれらの変数へのアクセスを試みます。したがって、行 40、41、および 42 では、保護されたプロパティ/メソッド/変数にアクセスできないことを伝える致命的なエラーが発生します。したがって、すべてが保護されているため、Animal クラスの外部の変数にはアクセスできません。
したがって、保護された変数は、クラス内で特別に定義された変数、メソッド、プロパティを制御するために使用されるアクセス修飾子です。プレフィックスを付けて明示的に指定する必要があるため、宣言されたパッケージ内で、および親パッケージから継承するサブクラスによってのみアクセスできます。
以上がPHPで保護されていますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。