ホームページ >バックエンド開発 >PHPチュートリアル >PHP 5: `$this` と `self` – それぞれをいつ使用するか?

PHP 5: `$this` と `self` – それぞれをいつ使用するか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-20 06:34:10624ブラウズ

PHP 5: `$this` vs. `self` – When to Use Each?

Self と $this: それぞれをいつどのように使用するか

質問:

PHP 5 では、キーワード「self」と「$this」の使用法はどのように異なりますか?それぞれを適切に使用するのはどのような場合ですか?

答え:

短い答え:

参照するには "$this" を使用します。現在のオブジェクトのインスタンス変数とメソッド。現在のクラスの静的変数とメソッドを参照するには、「self」を使用します。

完全な回答:

非静的メンバーと静的メンバー:

  • "$this->member" は非静的メンバーにアクセスします現在のオブジェクトに固有の変数とメソッド。
  • "self::$member" は、クラスのすべてのインスタンスによって共有される静的メンバー変数とメソッドにアクセスします。

ポリモーフィズム:

  • "$this" は、派生メソッドで定義されたメソッドを呼び出すことでポリモーフィズムを実証できます。 class.
  • 「self」はポリモーフィズムを抑制し、常に現在のクラスで定義されたメソッドを呼び出します。

例 (正しい使用法):

class X {
    private $non_static_member = 1;
    private static $static_member = 2;

    function __construct() {
        echo $this->non_static_member . ' ' . self::$static_member;
    }
}

new X(); // Output: 1 2

例 (間違っています)使用法):

class X {
    private $non_static_member = 1;
    private static $static_member = 2;

    function __construct() {
        echo self::$non_static_member . ' ' . $this->static_member; // Incorrect usage
    }
}

new X(); // Error: Undefined properties

ポリモーフィズムの抑制:

class X {
    function foo() {
        echo 'X::foo()';
    }

    function bar() {
        self::foo(); // Suppresses polymorphism
    }
}

class Y extends X {
    function foo() {
        echo 'Y::foo()';
    }
}

$x = new Y();
$x->bar(); // Output: X::foo()

概要:

「$」を使用これは、非静的メンバーのアクセスとポリモーフィズムの場合に使用します。静的メンバーへのアクセスやポリモーフィズムを抑制する必要がある場合は、「self」を使用します。

以上がPHP 5: `$this` と `self` – それぞれをいつ使用するか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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