アットウィキロゴ

アクセス権

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

メンバのアクセス権

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

 public と private の使い方

例 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= newMyClass2();
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 の定義
*/
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";
    }
}

class
FooextendsBar
{
    
publicfunctiontestPublic() {
        echo
"Foo::testPublic\n";
    }
    
    
privatefunctiontestPrivate() {
        echo
"Foo::testPrivate\n";
    }
}

$myFoo= newfoo();
$myFoo->test();// Bar::testPrivate
                // Foo::testPublic
?>

タグ:

+ タグ編集
  • タグ:
最終更新:2008年08月31日 09:34