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