PHP Encapsulation Surprises
By Angsuman Chakraborty, Gaea News NetworkThursday, September 15, 2005
In PHP, unlike Java or C++, $this has to be explicitly used to refer to variables within a class.
The value of $this is determined by the context in which it is called. In certain situations $this may actually refer to the invoking class rather then the current class. This breaks object encapsulation.
$this pseudo-variable is not defined if the method in which it is located is called statically with an exception as noted below.
$this is defined if a method is called statically from within another object. In this case, the value of $this is that of the calling object.
The following example from PHP manual will clarify this:
<?php class A { function foo() { if (isset($this)) { echo '$this is defined ('; echo get_class($this); echo ")\n"; } else { echo "\$this is not defined.\n"; } } } class B { function bar() { A::foo(); } } $a = new A(); $a->foo(); A::foo(); $b = new B(); $b->bar(); B::bar(); ?>
Output:
$this is defined (a)
$this is not defined.
$this is defined (b)
$this is not defined.
izlesene