Я тут одну неочевидную для себя вещь обнаружил, может кому-то еще будет полезно:
class Privatir{ private $_ololo; public function take(Privatir $source){ $this->_ololo = $source->_ololo; return $this; } }
Что именно меня удивило? Я всегда считал приватные свойства доступными только внутри методов самого объекта (именно это для меня значили слова «инкапсулированные в объект»), а оказывается они расшарены для всех экземпляров того же класса! Интересно, в других языках тоже так?
Если кто не верит — вот вам полный код с тестом
class Privatir{ private $_ololo; public function __construct($ololo){ $this->_ololo = $ololo; } public function take(Privatir $source){ $this->_ololo = $source->_ololo; return $this; } public function ololo(){ return $this->_ololo; } } class phpTest extends PHPUnit_Framework_TestCase{ public function testPrivatirs(){ $a = new Privatir('a'); $a->take(new Privatir(('b'))); $this->assertEquals('b', $a->ololo()); } }
ссылка на оригинал статьи http://habrahabr.ru/post/227353/
Добавить комментарий