PHP won't let you reassign $this
because it is a readonly reference to the contextual object.
class Test { var $foo = "bar"; function abc() { $this = "Hello!"; } } $test = new Test(); $test->abc();
PHP Fatal error: Cannot re-assign $this in - on line 14 Fatal error: Cannot re-assign $this in - on line 14
Since PHP has the flaw of allowing you to use variables as variables, however, you can put 'this'
in a variable. PHP doesn't seem to notice that that's assigning to $this
:
class Test { var $foo = "bar"; function abc() { $thisStr = "this"; $$thisStr = "Hello!"; } } $test = new Test(); $test->abc();
Tricked you!
However, if you then use $this
as an object, it's still $this
! But if you don't, it's not:
class Test { var $foo = "bar"; function abc() { var_dump($this); var_dump($this->foo); $thisStr = "this"; $$thisStr->foo = "cats"; $$thisStr = "Hello!"; var_dump($this); var_dump($this->foo); } } $test = new Test(); $test->abc();
class Test#1 (1) { public $foo => string(3) "bar" } string(3) "bar" string(6) "Hello!" string(4) "cats"
Surely someone's realised by now that the people behind PHP might not really know what they're doing.
Edit: turns out this already came from reddit