发布于2021-03-10 19:56 阅读(682) 评论(0) 点赞(4) 收藏(4)
在PHP 5中,使用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()
当前对象的确切类型的成员函数。如果对象是type X
,则调用X::foo()
。如果对象是type Y
,则调用Y::foo()
。但是X::foo()
总是使用self :: foo()来调用。
从http://www.phpbuilder.com/board/showthread.php?t=10354489:
通过http://board.phpbuilder.com/member.php?145249-laserlight
作者:黑洞官方问答小能手
链接:http://www.phpheidong.com/blog/article/105/025ae0b506232afa090c/
来源:php黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 php黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-4
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!