ホームページ  >  記事  >  バックエンド開発  >  php: クラス内のメンバーのアクセス制御

php: クラス内のメンバーのアクセス制御

黄舟
黄舟オリジナル
2017-07-02 10:56:472666ブラウズ

アクセス制御

プロパティまたはメソッドに対するアクセス制御は、先頭にキーワード public、protected、または private を追加することで実現されます。

public で定義されたクラス メンバーはどこからでもアクセスできます。

protected で定義されたクラス メンバーは、そのメンバーが配置されているクラスのサブクラスおよび親クラスからもアクセスできます (もちろん、メンバーが配置されているクラスからもアクセスできます)。アクセスされる) ; private で定義されたクラス メンバーには、そのメンバーが配置されているクラスからのみアクセスできます。

PHP5では以下の3つのアクセス修飾子がサポートされています。

(1) 公開。この修飾子はデフォルトであり、プロパティまたはメソッドにアクセス修飾子が指定されていない場合、パブリックになります。パブリック プロパティまたはパブリック メソッドには、クラスの内部と外部の両方でアクセスできます。

(2)プライベート。この修飾子は、マークされたプロパティまたはメソッドがクラス内でのみアクセスできることを示します。

には継承できません!

(3) 保護されました。この修飾子は、マークされたプロパティまたはメソッドがクラス内でのみアクセスできることを示します。継承可能

Private は同じクラスからアクセスできますが、サブクラスも外部クラスもアクセスできません。

protected は同じクラスとサブクラスからアクセスできますが、外部クラスはアクセスできません。

クラスメンバーのアクセス制御

クラスメンバーはキーワードpublic、protected、またはprivateを使用して定義する必要があります

<?php
class MyClass
{
    public $public = &#39;Public&#39;;
    protected $protected = &#39;Protected&#39;;
    private $private = &#39;Private&#39;;
    function printHello()
    {
        echo $this->public;
        echo $this->protected;
        echo $this->private;
    }
}
$obj = new MyClass();
echo $obj->public; // 这行能被正常执行
echo $obj->protected; // 这行会产生一个致命错误
echo $obj->private; // 这行也会产生一个致命错误
$obj->printHello(); // 输出 Public、Protected 和 Private
class MyClass2 extends MyClass
{
    // 可以对 public 和 protected 进行重定义,但 private 而不能
    protected $protected = &#39;Protected2&#39;;
    function printHello()
    {
        echo $this->public;
        echo $this->protected;
        echo $this->private;
    }
}
$obj2 = new MyClass2();
echo $obj->public; // 这行能被正常执行
echo $obj2->private; // 未定义 private
echo $obj2->protected; // 这行会产生一个致命错误
$obj2->printHello(); // 输出 Public、Protected2,但不会输出 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
?>

メソッドのアクセス制御

クラス内のメソッドはキーワードpublic、protected、またはprivateを使用する必要があります。これらのキーワードが設定されていない場合、メソッドはデフォルトの public に設定されます。

りー

以上がphp: クラス内のメンバーのアクセス制御の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。