Edit report at http://bugs.php.net/bug.php?id=52428&edit=1

 ID:               52428
 User updated by:  tyra3l at gmail dot com
 Reported by:      tyra3l at gmail dot com
 Summary:          $this isn't immutable
 Status:           Bogus
 Type:             Bug
 Package:          Scripting Engine problem
 Operating System: all
 PHP Version:      5.3.3

 New Comment:

Thanks for the clarification.



Did I something wrong in the report, or you just copypasted the "Thank
you for 

taking the time to write to us..." part of your comment?



Maybe it would be a good thing to add this conclusion to the
documentation 

(reassigning this isn't allowed, because ..., if you try it, it will
give you an 

error "Cannot re-assign this..." [if you really need this, you can
do...])



Tyrael


Previous Comments:
------------------------------------------------------------------------
[2010-07-25 18:39:17] johan...@php.net

Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php

We prevent from mistakes, we don't prevent people from hurting them
purposely. If you want you can shoot yourself in your head.

------------------------------------------------------------------------
[2010-07-24 11:36:17] tyra3l at gmail dot com

Description:
------------
As some closed bug-reports and the "PHP Fatal error:  Cannot re-assign
$this" 

states, the $this should be read-only/inmutable  in PHP5.

but with some tricks(variable variables mostly), you can walk-around
this 

constraint.

See the Test script.

I don't know the importance of this restriction, and with reflection you
can shoot 

you in the leg anyway, so maybe this can be left as is.

Test script:
---------------
<?php



error_reporting(E_ALL);



$var = new StdClass();

$var->foo = 'bar';



//$this = $var; // PHP Fatal error:  Cannot re-assign $this



$GLOBALS['this'] = $var;



var_dump($this);



$var->foo = 'baz';



$foo = 'this';

$$foo = $var;



var_dump($this);



foo($this);



function foo($this){

  //global $this; // PHP Fatal error:  Cannot re-assign $this

  // $this = $GLOBALS['var']; // PHP Fatal error:  Cannot re-assign
$this

  var_dump($this);

  $GLOBALS['this']->foo = 'baw';

  $$GLOBALS['foo'] = $GLOBALS['this'];

  var_dump($this);

}



Expected result:
----------------
PHP Fatal error:  Cannot re-assign $this

for every attempt to overwrite $this

Actual result:
--------------
you can set $this in the global scope through $GLOBALS, with argument in


functions, and with variable variables in everywhere.


------------------------------------------------------------------------



-- 
Edit this bug report at http://bugs.php.net/bug.php?id=52428&edit=1

Reply via email to