问题描述
简答
$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();
?>
下面是一个带有for 成员函数的$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();
?>
下面是一个使用for 成员函数来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()
当前对象的确切类型的成员函数。如果对象是 oftype X
,它会调用X::foo()
. 如果对象是 oftype Y
,则调用Y::foo()
. 但是 self::foo()X::foo()
总是被调用。
解决方法
self
在 PHP 5 中,什么时候应该使用 ‘self’ 而不是 ‘$this’?