如何解决我什么时候应该使用 'self' 而不是 '$this'?
简答
$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’?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。