プロパティまたはメソッドのアクセス権 (visibility) は、
キーワード: public, protected または private を指定することにより、
定義できます。
public として定義されたアイテムには、どこからでもアクセス可能です。
protected は、派生クラスや親クラス (とそれを定義するクラス自体)
にアクセスを制限します。private は、
それを定義するクラスのみにアクセス権を制限します。
クラスのメンバは、public, private, または protected
として定義されなくてはなりません。
例 19-10. メンバの宣言
<?php /** * 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; // 動作します echo $obj->protected; // Fatal エラー echo $obj->private; // Fatal エラー $obj->printHello(); // Public、Protected そして Private を表示します
/** * MyClass2 の定義 */ class MyClass2 extends MyClass { // public および protected メソッドは再定義できますが、 // private はできません。 protected $protected = 'Protected2';
function printHello() { echo $this->public; echo $this->protected; echo $this->private; } }
$obj2 = new MyClass2(); echo $obj->public; // 動作します echo $obj2->private; // 未定義です echo $obj2->protected; // Fatal エラー $obj2->printHello(); // Public、Protected2 を表示しますが Private は表示しません
?>
|
|
注意:
キーワード var で変数を宣言する
PHP 4 の方法は、互換性を保つために今でもサポートされています
(これは public と同じ扱いになります)。PHP 5.1.3 より前では、
これを使用すると E_STRICT
警告が発生します。
クラスメソッドは、public, private, または protected
として定義される必要があります。どの宣言も有さないメソッドは、
public として定義されます。
例 19-11. メソッドの宣言
<?php /** * MyClass の定義 */ class MyClass { // コンストラクタは public でなければなりません public function __construct() { }
// public メソッドの宣言 public function MyPublic() { }
// protected メソッドの宣言 protected function MyProtected() { }
// private メソッドの宣言 private function MyPrivate() { }
// これは public となります function Foo() { $this->MyPublic(); $this->MyProtected(); $this->MyPrivate(); } }
$myclass = new MyClass; $myclass->MyPublic(); // 動作します $myclass->MyProtected(); // Fatal エラー $myclass->MyPrivate(); // Fatal エラー $myclass->Foo(); // Public、Protected および Private が動作します
/** * MyClass2 の定義 */ class MyClass2 extends MyClass { // これは public となります function Foo2() { $this->MyPublic(); $this->MyProtected(); $this->MyPrivate(); // Fatal エラー } }
$myclass2 = new MyClass2; $myclass2->MyPublic(); // 動作します $myclass2->Foo2(); // Public および Protected は動作しますが、Private は動作しません
class Bar { public function test() { $this->testPrivate(); $this->testPublic(); }
public function testPublic() { echo "Bar::testPublic\n"; } private function testPrivate() { echo "Bar::testPrivate\n"; } }
class Foo extends Bar { public function testPublic() { echo "Foo::testPublic\n"; } private function testPrivate() { echo "Foo::testPrivate\n"; } }
$myFoo = new foo(); $myFoo->test(); // Bar::testPrivate // Foo::testPublic ?>
|
|