Для кого приватные?

от автора

Я тут одну неочевидную для себя вещь обнаружил, может кому-то еще будет полезно:

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/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *