Баг

Jun 09, 2013 09:21

Смотрите, какая прелесть:

class A {
private $foo = 1;
function bar($f){
return $f->foo;
}
}

$a = new A;
$b = new A;
print $b->bar($a);

выводит 1.

Проверено в 5.3.26 и 5.4.16, а также с protected-полем.

В лучших традициях.

UPD. Понятно, что "а зачем вы читаете из поля, если знаете, что оно приватное?". Сложности могут начаться, когда для приватного свойства определены __set и __get, либо для приватной функции __call. Пример:

class A {
protected $foo = 'foo';
function __get($name){
return "changed $name";
}
function bar($f){
return $f->foo;
}
}

$a = new A;
print $a->foo;
$b = new A;
print $b->bar($a);
Previous post Next post
Up