In PHP 5, what is the difference between using self and $this?
When is each appropriate?
解决方案Short Answer
Use $this to refer to the current object. Use self to refer to the current class. In other words, use $this->member for non-static members, use self::$member for static members.
Full Answer
Here is an example of correct usage of $this and self for non-static and static member variables:
<?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(); ?>Here is an example of incorrect usage of $this and self for non-static and static member variables:
<?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(); ?>Here is an example of polymorphism with $this for member functions:
<?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(); ?>Here is an example of suppressing polymorphic behaviour by using self for member functions:
<?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(); ?>
The idea is that $this->foo() calls the foo() member function of whatever is the exact type of the current object. If the object is of type X, it thus calls X::foo(). If the object is of type Y, it calls Y::foo(). But with self::foo(), X::foo() is always called.
From www.phpbuilder/board/showthread.php?t=10354489:
By board.phpbuilder/member.php?145249-laserlight
更多推荐
我什么时候应该使用 'self' 而不是 '$this'?
发布评论