プロパティまたはメソッドのアクセス権 (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 は動作しません
?>
|
|