我什么时候应该在“$this”上使用“self”?

在PHP5中,使用self$this有什么区别

什么时候合适

简短回答

使用$this引用当前
对象使用self参考
现在的班级。换句话说,使用
$this->成员对于非静态成员,
对静态成员使用self::$member

完整答案

以下是非静态和静态成员变量的正确使用$thisself的示例:

<?php
X类{
私有$non_static_member=1;
私有静态$static_成员=2;
函数_u构造(){
echo$this->非静态成员。“”
.self::$static_成员;
}
}
新X();
?>

以下是非静态和静态成员变量使用$thisself不正确的示例:

<?php
X类{
私有$non_static_member=1;
私有静态$static_成员=2;
函数_u构造(){
echo self::$non_static_member''
.$this->静态\u成员;
}
}
新X();
?>

以下是成员函数的多态性示例,其中包含$this

<?php
X类{
函数foo(){
回显“X::foo()”;
}
功能条(){
$this->foo();
}
}
类Y扩展X{
函数foo(){
回显“Y::foo()”;
}
}
$x=新的Y();
$x->bar();
?>

以下是通过对成员函数使用self抑制多态行为的示例:

<?php
X类{
函数foo(){
回显“X::foo()”;
}
功能条(){
self::foo();
}
}
类Y扩展X{
函数foo(){
回显“Y::foo()”;
}
}
$x=新的Y();
$x->bar();
?>

想法是$this->foo()调用当前对象的确切类型的成员函数。如果对象是类型X,则它将调用X::foo()。如果对象是类型Y,它将调用Y::foo()。但是对于self::foo(),总是调用X::foo()

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

借http://board.phpbuilder.com/member.php?145249-激光

发表评论