public: メソッドまたはプロパティは任意のスコープでアクセスできます。プロパティまたはメソッドにアクセス修飾子が指定されていない場合、これがデフォルトです。
protected: メソッドまたはプロパティには、クラスまたは継承クラスのメンバーからのみアクセスできます。
private: メソッドまたはプロパティには、クラスのメンバーからのみアクセスでき、継承されたクラスのメンバーからはアクセスできません。プライベートとしてマークされたメソッドまたはプロパティは、継承されたクラスで再定義できます。各クラスは、それが定義するプライベート メソッドのみを参照できます。
これら 3 つの修飾子は、次のようにスコープの観点から大きいものから小さいものに並べ替える必要があります:
public→protected→private スコープ内であると言われる理由は、クラスが前の関数と同じで結合されているためです。メソッドが PHP クラスにカプセル化されている一部の属性。このカプセル化によってデータの「可視性」が決定されるため、定義されたプロパティとメソッドをクラス外で自由に変更することはできず、それらを呼び出すことのみが可能になります。これはカプセル化の利点であり、セキュリティも向上します。これらの修飾子の役割を説明するには、次のコードを見てください:
<ol class="dp-xml"> <li class="alt"><span><span class="tag"><</span><span> ?php </span></span></li><li><span>class myClass{ </span></li><li class="alt"><span>public $</span><span class="attribute">public</span><span>=</span><span class="attribute-value">"Public"</span><span>; </span></li><li><span>protected $</span><span class="attribute">protected</span><span>=</span><span class="attribute-value">"Protected"</span><span>; </span></li><li class="alt"><span>private $</span><span class="attribute">private</span><span>=</span><span class="attribute-value">"Private"</span><span>; </span></li><li><span>function say_Hello(){ </span></li><li class="alt"><span>//我现在什么也不做,等下再告诉你 </span></li><li><span>} </span></li><li class="alt"><span>} </span></li><li><span>$</span><span class="attribute">obj</span><span>=</span><span class="attribute-value">new</span><span> myClass(); </span></li><li class="alt"><span>echo $obj-</span><span class="tag">></span><span>public; </span></span></li> <li> <span>//echo $obj-</span><span class="tag">></span><span>protected; </span> </li> <li class="alt"> <span>//echo $obj-</span><span class="tag">></span><span>private; </span> </li> <li> <span class="tag">?></span><span> </span> </li> <li class="alt"> <span class="tag"><</span><span> ?php </span></li><li><span>class myClass{ </span></li><li class="alt"><span>public $</span><span class="attribute">public</span><span>=</span><span class="attribute-value">"Public"</span><span>; </span></li><li><span>protected $</span><span class="attribute">protected</span><span>=</span><span class="attribute-value">"Protected"</span><span>; </span></li><li class="alt"><span>private $</span><span class="attribute">private</span><span>=</span><span class="attribute-value">"Private"</span><span>; </span></li><li><span>function say_Hello(){ </span></li><li class="alt"><span>//我现在什么也不做,等下再告诉你 </span></li><li><span>} </span></li><li class="alt"><span>} </span></li><li><span>$</span><span class="attribute">obj</span><span>=</span><span class="attribute-value">new</span><span> myClass(); </span></li><li class="alt"><span>echo $obj-</span><span class="tag">></span><span>public; </span> </li> <li> <span>//echo $obj-</span><span class="tag">></span><span>protected; </span> </li> <li class="alt"> <span>//echo $obj-</span><span class="tag">></span><span>private; </span> </li> <li> <span class="tag">?></span><span> </span> </li> </ol>
上記の例を実行すると、「Public」が取得されますが、//echo $obj->private のコメントを削除すると、 ; を実行すると、次のエラーが表示されます: 致命的エラー: E:apachehtdocsexamplefile.php の 13 行目の保護プロパティ myClass::$protected にアクセスできません。
クラスの属性定義に自由にアクセスできないことがわかります。つまり、PHP クラスのカプセル化で定義された一部の操作は変更できません。これが可視性です。これらのメンバーは他のクラスには表示されない可能性があるため、このクラスのメンバーが「外部」にはわかりません。
もちろん、「プライベート」として定義された属性にアクセスまたは変更する必要がある場合は、PHP が提供するシステム メソッド _get() および _set() を使用することもできます。今はまだ理解しているだけなので、これについては後で詳しく学びます。