self
PHP 5 では、と を使用する場合の違いは何ですか$this
?
それぞれはいつ適切でしょうか?
ベストアンサー1
短い答え
$this
現在のオブジェクトを参照するには を使用します。self
現在のクラスを参照するには を使用します。つまり、$this->member
非静的メンバーには を使用し、self::$member
静的メンバーには を使用します。
完全な回答
非静的メンバー変数と静的メンバー変数に対するとの正しい使用例を次に示します。$this
self
<?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();
?>
非静的メンバー変数と静的メンバー変数に対するとの誤った使用例を次に示します。$this
self
<?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 X
X::foo()
type Y
Y::foo()
X::foo()
からhttp://www.phpbuilder.com/board/showthread.php?t=10354489: