phpsa
phpsa copied to clipboard
[Analyzer] Unexpected use of $this
refs https://wiki.php.net/rfc/this_var
// Запретить использование в качестве имени параметра
function foo($this) {
}
// Запретить использование в качестве статической переменной
static $this;
// Запретить использование как глобальной переменной
global $this;
// Запретить использование в качестве переменной исключения в catch
try {
...
} catch (Exception $this) { // Fatal error: Cannot re-assign $this
}
// Запретить использование в foreach
foreach ($a as $this) {
}
// Запретить использование в unset()
unset($this);
// Запретить обращение через $$
$a = "this";
$$a = 42;
ping @ddmler What do you think about it?
I will try to implement it
- [ ] setting $this via variable variables
- [x] $this function parameter
- [ ] $this via parse_str(), extract(), list() (do we really need that?)
- [ ] and this: (?)
class C {
function foo(){
$a =& $this;
$a = 42;
var_dump($this); // prints object(C)#1 (0) {}, php-7.0 printed int(42)
}
}
$x = new C;
$x->foo();
php -a
Interactive mode enabled
php > class A {function foo() {$a =& $this; $a = 42; echo phpversion()."\n"; var_dump($this);}}
php > $x = new A;
php > $x->foo();
5.6.25-2+deb.sury.org~trusty+1
int(42)
php -a
Interactive mode enabled
php > class A {function foo() {$a =& $this; $a = 42; echo phpversion()."\n"; var_dump($this);}}
php > $x = new A;
php > $x->foo();
7.0.10-2+deb.sury.org~trusty+1
int(42)