ホームページ > php教程 > php手册 > PHP オブジェクト指向ガイド (9) アクセスの種類

PHP オブジェクト指向ガイド (9) アクセスの種類

WBOY
リリース: 2016-06-13 12:21:43
オリジナル
908 人が閲覧しました

13. アクセス型
型アクセス修飾子を使用すると、開発者はクラス メンバーへのアクセスを制限できます。これは PHP5 の新機能ですが、
は OOP 言語の優れた機能です。そして、ほとんどの OOP 言語はすでにこの機能をサポートしています。 PHP5 は、
public (パブリック、デフォルト)、private (プライベート)、および protected (保護された) の 3 つのアクセス修飾子をサポートします。
public public 修飾子。クラス内のメンバーにはアクセス制限がありません。すべての外部メンバーがアクセス (読み取りおよび書き込み) できます。
このクラス メンバー (メンバー属性およびメンバー メソッドを含む)。PHP5 より前のすべてのバージョン PHP では、クラスのすべてのメンバーは
パブリックであり、PHP5 では、クラスのメンバーがメンバー アクセス修飾子を指定しない場合、そのメンバーはパブリックとみなされます。
例: public $name;
public functionsay(){};
private メンバーとして定義された private 修飾子は、同じクラス内のすべてのメンバーに表示されます。アクセス制限はありませんが、このクラスの外部コードは操作の変更や読み取りさえできず、このクラスのサブクラスはプライベートで変更されたメンバーにアクセスできません。
例: private $var1 = 'A'; //Attribute
private function getValue(){} //Function
protected protected メンバー修飾子、protected として変更されたメンバーはクラス コード アクセスの外部からアクセスできません。ただし、
にはこのクラスのサブクラスへのアクセス権があり、プロパティとメソッドの読み取りと書き込みができます。
サブクラスを含むこのサブクラスの外部コードには、そのプロパティとメソッドにアクセスする権限がありません。
例: protected $name;
protected functionsay(){};
private protected public
同じクラス内 √ √
クラスのサブクラス内 √
すべて外部member√
コード スニペット



コードをコピー

コードは次のとおりです: / * *

* MyClass を定義
*/
class MyClass{
public $public = 'Public';
protected $protected = 'Protected';
private $private = 'Private'; printHello (){
echo $this->public;
echo $this->private;
}
$obj = new MyClass(); // 動作します
echo $obj->protected; // 致命的なエラー
echo $obj->private;
$obj->printHello(); // Public、Protected、Private を表示します
/**
* MyClass2 を定義
*/
class MyClass2 extends MyClass{
// public と protected を再宣言できますprotected メソッドですが、プライベートではありません
protected = 'Protected2';
function printHello(){
echo $this->public
echo $this->protected; echo $this->private;
}
}
$obj2 = new MyClass2();
echo $obj->public; //Works
echo $obj2-> private ; // 未定義
echo $obj2->protected; // 致命的なエラー
$obj2->printHello(); // Private ではなく、Public、Protected2 を表示します


コード スニペット



コードをコピー

コードは次のとおりです:


/**

* MyClass を定義 */ class MyClass{ // コンストラクターは public である必要があります public function __construct() { }

// public メソッドを宣言します

public function MyPublic() { }
// プロテクトメソッドを宣言します
プロテクト関数 MyProtected() { }
// プライベートメソッドを宣言します
プライベート関数 MyPrivate() { }
// これはパブリックです
関数 Foo( ) {
$this->MyPublic();
$this->MyPrivate();
}
$ myclass = new MyClass;
$myclass->MyPublic(); // 動作します
$myclass->MyProtected(); // 致命的なエラー
$myclass->MyPrivate( ); // 致命的なエラー
$myclass->Foo(); // パブリック、プロテクト、プライベートの動作
/**
* MyClass2 を定義
*/
class MyClass2 extends MyClass{
//これは public
function Foo2(){
$this->MyPublic();
$this->MyPrivate(); // 致命的です。エラー
}
}
$myclass2 = new MyClass2;
$myclass2->MyPublic(); // パブリックで保護されています。 work, not Private
?>


さらに、サブクラスが親クラスのメソッドをオーバーライドする場合は、サブクラス内のメソッドのアクセス許可にも注意する必要があります。親クラスのオーバーライドされたメソッドのアクセス許可より低くてはなりません
アクセス許可は、親クラスのメソッドのアクセス許可以上である必要があります。
たとえば、親クラスのメソッドのアクセス権限が保護されている場合、サブクラスでオーバーライドされる権限は保護されている必要があります。
親クラスのメソッドがパブリックの場合、オーバーライドされるメソッドはパブリックです。サブクラス内のメソッドは public のみにすることができます。つまり、サブクラス内の
メソッドは常に親クラスのオーバーライドされたメソッドのアクセス権以上である必要があります。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート