PHP マニュアル
前のページ | 第 19章クラスとオブジェクト (PHP 5) | 次のページ

# アクセス権

プロパティまたはメソッドのアクセス権(visibility)は、 キーワード: public, protected または privateを指定することにより、 定義できます。 publicとして定義されたアイテムには、どこからでもアクセス可能です。 protectedは、派生クラスや親クラス(とそれを定義するクラス自体)にアクセスを 制限します。privateは、それを定義するクラスのみにアクセス権を 制限します。

## メンバのアクセス権

クラスのメンバは、public, private, または protectedとして 定義されなくてはなりません。

例 19-9. メンバの宣言
`<?php /** * Define MyClass */ class MyClass { public $public = 'Public'; protected $protected = 'Protected'; private $private = 'Private'; function printHello() { echo $this->public; echo $this->protected; echo $this->private; } } $obj = new MyClass(); echo $obj->public; // Works echo $obj->protected; // Fatal Error echo $obj->private; // Fatal Error $obj->printHello(); // Shows Public, Protected and Private /** * Define MyClass2 */ class MyClass2 extends MyClass { // We can redeclare the public and protected method, but not private protected $protected = 'Protected2'; function printHello() { echo $this->public; echo $this->protected; echo $this->private; } } $obj2 = new MyClass2(); echo $obj->public; // Works echo $obj2->private; // Undefined echo $obj2->protected; // Fatal Error $obj2->printHello(); // Shows Public, Protected2, not Private ?>`

> 注意: キーワードvarで変数を宣言する PHP 4の方法は、PHP 5オブジェクトではもはや 有効ではありません。 互換性のためにPHPで宣言された変数は、publicのアクセス権を 有していると仮定されますが、 `E_STRICT`警告が発生します。

## メソッドのアクセス権

クラスメソッドは、public, private, または protectedとして 定義される必要があります。どの宣言も有さないメソッドは、 publicとして定義されます。

例 19-10. メソッドの宣言
`<?php /** * Define MyClass */ class MyClass { // Contructors must be public public function __construct() { } // Declare a public method public function MyPublic() { } // Declare a protected method protected function MyProtected() { } // Declare a private method private function MyPrivate() { } // This is public function Foo() { $this->MyPublic(); $this->MyProtected(); $this->MyPrivate(); } } $myclass = new MyClass; $myclass->MyPublic(); // Works $myclass->MyProtected(); // Fatal Error $myclass->MyPrivate(); // Fatal Error $myclass->Foo(); // Public, Protected and Private work /** * Define MyClass2 */ class MyClass2 extends MyClass { // This is public function Foo2() { $this->MyPublic(); $this->MyProtected(); $this->MyPrivate(); // Fatal Error } } $myclass2 = new MyClass2; $myclass2->MyPublic(); // Works $myclass2->Foo2(); // Public and Protected work, not Private ?>`

前のページ | ホーム | 次のページ
コンストラクタとデストラクタ | 上に戻る | スコープ定義演算子 (::)