1. ホーム
  2. php

[解決済み] どのような場合に '$this' よりも 'self' を使うべきですか?

2022-03-14 23:21:29

質問

PHP 5 では、以下のような違いがあります。 self$this ?

それぞれどのような場合に適切ですか?

どのように解決するのか?

簡単な答え

<ブロッククオート

使用方法 $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() を呼び出します。 foo() のメンバ関数で、現在のオブジェクトの正確な型が何であれ、その型を返します。もしオブジェクトが type X を呼び出します。 X::foo() . オブジェクトが type Y を呼び出します。 Y::foo() . しかし、self::foo()で。 X::foo() が常に呼び出されます。

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

By http://board.phpbuilder.com/member.php?145249-laserlight