In PHP 5, what is the difference between using self and $this?
When is each appropriate?
Answer
Use
$thisto refer to the current
object. Useselfto refer to the
current class. In other words, use
$this->memberfor non-static members,
useself::$memberfor static members.
Here is an example of correct usage of $this and self for non-static and static member variables:
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:
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:
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:
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 thefoo()member function of whatever is the exact type of the current object. If the object is oftype X, it thus callsX::foo(). If the object is oftype Y, it callsY::foo(). But with self::foo(),X::foo()is always called.
From http://www.phpbuilder.com/board/showthread.php?t=10354489:
By http://board.phpbuilder.com/member.php?145249-laserlight
No comments:
Post a Comment