ホームページ > バックエンド開発 > PHPチュートリアル > PHPオブジェクト指向アクセス制御パブリック、プライベート、プロテクト詳細解説_PHPチュートリアル

PHPオブジェクト指向アクセス制御パブリック、プライベート、プロテクト詳細解説_PHPチュートリアル

WBOY
リリース: 2016-07-13 17:12:46
オリジナル
1287 人が閲覧しました

この記事では、例を使用して PHP5 のオブジェクト指向アクセス制御の詳細を説明しています。パブリック、プライベート、および保護が必要な友人は参照できます。

PHP5 ではオブジェクト指向メカニズムが強化され、パブリック、プライベート、プロテクトなどの一般的なオブジェクト指向アクセス制御メカニズムが追加されました。文字通りに理解するには:

パブリックは間違いなくパブリックを意味し、クラス自体とその外部サブクラスの両方がこのプロパティまたはメソッドにアクセスできることを意味します。

プライベートは英語でプライベートを意味します。これはクラス自体内でのみアクセスできます。インスタンス化されたオブジェクトハンドルはプロパティやメソッドにアクセスできず、サブクラスもそれらにアクセスできません。

Protected 保護されたプロパティまたはメソッド。このプロパティまたはメソッドは、クラス自体またはサブクラスによってのみ内部的にアクセスでき、インスタンス化されたオブジェクト ハンドルにはアクセスできません。

次に、この問題について説明する例を挙げてみましょう。

宝石博物館の管理者シャオ・リーがいて、倉庫内の宝石をルビー、サファイア、エメラルドの 3 つのカテゴリーに分類しているとします。そして属性は分けられており、ルビーは国内の誰もが訪れることができる(公開)、サファイアは管理者シャオ・リーの家族に伝わる(保護)、エメラルドはシャオ・リーが山で見たものです。 (プライベート)。

そして、次のように考えることができます:

公開ラベルが付いたルビーはその国の所有物であり、その国の合法的国民である限り、すべての人が所有しており、閲覧したり写真を撮ったりすることができます。

保護 これは保護されています。シャオ・リーの家族(シャオ・リーの子供または孫)のみが特定の部屋を訪問して写真を撮ることができます。彼らは部屋の外を見ることを許可されていません。

これはプライベートです。シャオ・リーは写真を撮ることはおろか、他の人に知られたくないので、シャオ・リーの部屋にいるシャオ・リーだけが見ることができます。


コードは次のとおりですコードをコピー
エラー報告(E_ALL);

クラステスト{

パブリック $パブリック

プライベート$プライベート

保護された $protected

静的 $インスタンス

パブリック関数 __construct(){

$this->public = 'public
';

$this->private = 'プライベート
';

$this->protected = '保護されています
';

}

静的関数 Tank(){

if (!isset(self::$instance[get_class()]))

{

$c = get_class();

self::$instance = 新しい $c

}

self::$インスタンスを返す

}

パブリック関数 pub_function() {

echo "パブリック機能をリクエストします
"; echo $this->public

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
';  $this->gt;private = 'private
';  $this->protected = 'protected
';  } 静的関数 Tank(){ if (!isset(self::$instance[get_class()])) { $c = get_class();  self::$instance = 新しい $c;  } self::$instance を返します。  } public function pub_function() { echo "パブリック関数をリクエストしました
";  エコー $this->public;  echo $this->private;        //private,内部可调用 echo $this->protected;      //保護されており、内部で使用可能 $this->pri_function();      //private メソッド、内部で使用可能 $this->pro_function();      //protected メソッド、内部で使用可能 } protected function pro_function(){ echo "保護された関数を要求します
";  } プライベート関数 pri_function(){ echo "プライベート関数をリクエストしました
";  $test = test::tank();エコー $test->public; echo $test->private;    //致命的エラー: プライベート プロパティにアクセスできません test::$private echo $test->protected;  //致命的エラー: 保護されたプロパティ test::$protected $test->pub_function(); にアクセスできません。 $test->pro_function();  //致命的なエラー: コンテキスト $test->pri_function() から保護されたメソッド test::pro_function() を呼び出します。  //致命的なエラー: コンテキストからプライベート メソッド test::pri_function() を呼び出します ?>

上の例では、私は見ることができます、
public: クラスの内部調整に使用でき、インスタンス化に使用できます。 private: クラスの内部調整に使用でき、インスタンス化に使用できます。 protected: 内部調整用にクラス化でき、調整用ロックを例示できます。

クラステスト{

パブリック $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

tru​​ehttp://www.bkjia.com/PHPjc/629261.html技術記事この記事では、PHP5 のオブジェクト指向アクセス制御のパブリック、プライベート、プロテクトについて詳しく説明するために例を使用しています。必要な場合は参照してください。 PHP5ではオブジェクト指向の仕組みが強化されています...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート