'$this' ではなく 'self' を使うべきなのはいつですか? 質問する

'$this' ではなく 'self' を使うべきなのはいつですか? 質問する

selfPHP 5 では、と を使用する場合の違いは何ですか$this?

それぞれはいつ適切でしょうか?

ベストアンサー1

短い答え

$this現在のオブジェクトを参照するには を使用します。self現在のクラスを参照するには を使用します。つまり、$this->member非静的メンバーには を使用し、self::$member静的メンバーには を使用します。

完全な回答

非静的メンバー変数と静的メンバー変数に対するとの正しい使用例を次に示します。$thisself

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

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

new X();
?>

非静的メンバー変数と静的メンバー変数に対するとの誤った使用例を次に示します。$thisself

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

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

new X();
?>

以下はメンバー関数ポリモーフィズムの例です。$this

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

    function bar() {
        $this->foo();
    }
}

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

$x = new Y();
$x->bar();
?>

以下は、メンバー関数を使用して多態的な動作を抑制する例です。self

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

    function bar() {
        self::foo();
    }
}

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

$x = new Y();
$x->bar();
?>

考え方としては、 は現在のオブジェクトの正確な型である のメンバー関数$this->foo()を呼び出すというものです。 オブジェクトが のものであれば、 が呼び出されます。オブジェクトが のものであれば、 が呼び出されます。 ただし、self::foo() では、が常に呼び出されます。foo()type XX::foo()type YY::foo()X::foo()

からhttp://www.phpbuilder.com/board/showthread.php?t=10354489:

によるhttp://board.phpbuilder.com/member.php?145249-レーザーライト

おすすめ記事