この記事では、例を使用して PHP5 のオブジェクト指向アクセス制御の詳細を説明しています。パブリック、プライベート、および保護が必要な友人は参照できます。
PHP5 ではオブジェクト指向メカニズムが強化され、パブリック、プライベート、プロテクトなどの一般的なオブジェクト指向アクセス制御メカニズムが追加されました。文字通りに理解するには:
パブリックは間違いなくパブリックを意味し、クラス自体とその外部サブクラスの両方がこのプロパティまたはメソッドにアクセスできることを意味します。
プライベートは英語でプライベートを意味します。これはクラス自体内でのみアクセスできます。インスタンス化されたオブジェクトハンドルはプロパティやメソッドにアクセスできず、サブクラスもそれらにアクセスできません。Protected 保護されたプロパティまたはメソッド。このプロパティまたはメソッドは、クラス自体またはサブクラスによってのみ内部的にアクセスでき、インスタンス化されたオブジェクト ハンドルにはアクセスできません。
次に、この問題について説明する例を挙げてみましょう。
宝石博物館の管理者シャオ・リーがいて、倉庫内の宝石をルビー、サファイア、エメラルドの 3 つのカテゴリーに分類しているとします。そして属性は分けられており、ルビーは国内の誰もが訪れることができる(公開)、サファイアは管理者シャオ・リーの家族に伝わる(保護)、エメラルドはシャオ・リーが山で見たものです。 (プライベート)。
そして、次のように考えることができます:
公開ラベルが付いたルビーはその国の所有物であり、その国の合法的国民である限り、すべての人が所有しており、閲覧したり写真を撮ったりすることができます。
保護 これは保護されています。シャオ・リーの家族(シャオ・リーの子供または孫)のみが特定の部屋を訪問して写真を撮ることができます。彼らは部屋の外を見ることを許可されていません。
これはプライベートです。シャオ・リーは写真を撮ることはおろか、他の人に知られたくないので、シャオ・リーの部屋にいるシャオ・リーだけが見ることができます。
例
エラー報告(E_ALL);
クラステスト{ パブリック $パブリック プライベート$プライベート 保護された $protected 静的 $インスタンス パブリック関数 __construct(){ $this->public = 'public '; $this->protected = '保護されています 静的関数 Tank(){ if (!isset(self::$instance[get_class()])) { $c = get_class(); self::$instance = 新しい $c }
self::$インスタンスを返す }
パブリック関数 pub_function() { echo "パブリック機能をリクエストします echo $this->private; //プライベート、内部的に呼び出すことができます echo $this->protected; //保護されており、内部的に呼び出すことができます $this->pri_function(); //プライベートメソッド、内部的に呼び出すことができます $this->pro_function(); //保護されたメソッド、内部的に呼び出すことができます } 保護された関数 pro_function(){ echo "保護された機能をリクエストしています "; } プライベート関数pri_function(){ echo "プライベート機能をリクエストしています }
$test = テスト::タンク(); echo $test->public echo $test->private; //致命的なエラー: プライベート プロパティ test::$private にアクセスできません echo $test->protected; //致命的なエラー: 保護されたプロパティ test::$protected にアクセスできません $test->pub_function(); $test->pro_function(); //致命的なエラー: コンテキストから保護されたメソッド test::pro_function() を呼び出します$test->pri_function(); //致命的なエラー: コンテキストからプライベート メソッド test::pri_function() を呼び出します
?>
gt;public = 'public 上の例では、私は見ることができます、 クラステスト{ パブリック $public; プライベート$プライベート; 保護 $protected; 静的$インスタンス;
パブリック関数 __construct(){ $this->public = 'public '; $this->private = 'private '; $this->protected = 'protected '; } protected function tank(){ //私有メソッド不可继承,换成public,protected if (!isset(self::$instance[get_class()])) { $c = get_class(); self::$instance = 新しい $c; } self::$instance を返します。 }
パブリック関数 pub_function() { echo「パブリック機能をリクエストしました 」; echo $this->public; } 保護された関数 pro_function(){ echo「保護された機能をリクエストしました 」; echo $this->保護; } プライベート 関数 pri_function(){ echo「プライベート機能をリクエストしました 」; echo $this->プライベート; } }
クラス test1 はテストを拡張します{
パブリック関数 __construct(){ 親::タンク(); 親::__construct(); } 公共機能タンク(){ echo $this->public; echo $this->プライベート; //注意: 未定義のプロパティ: test1::$private echo $this->保護; $this->pub_function(); $this->pro_function(); $this->pri_function(); //致命的なエラー: コンテキスト「test1」からプライベート メソッド test::pri_function() を呼び出します }
パブリック関数pro_extends_function(){ echo「あなたはextends_protected機能をリクエストしています 」; } パブリック関数 pri_extends_function(){ echo「extends_private 関数をリクエストしました 」; } }
エラー報告(E_ALL); $test = 新しい test1();$test ->tank(); //サブクラスと親クラスには同じ名前のプロパティとメソッドがあります。サブクラスをインスタンス化すると、サブクラスのプロパティとメソッドが親クラスのプロパティとメソッドを上書きします。
?>
|
http://www.bkjia.com/PHPjc/629261.html