PHP: access to private and protected

Все верно.

А еще таким образом можно сделать простую универсальную отмычку для манкипатчинга:function & crackprop(object $obj, string $prop) { return ( Closure::bind ( function & () use ($prop) { return $this->$prop; } , $obj, $obj ) )();}$foo = &crackprop($pm, 'foo');$foo = 456;var_dump($foo);var_dump($pm->foo());— Все что выше было проделано для private свойств сработает для protected?— Да, все то же самое можно проделать и с protected.

— Напоследок по этой теме, чисто по фану, можешь еще назвать способ получить доступ к защищенным свойствам?— Да, есть еще один способ, я не стал его озвучивать так как это, вроде бы, уже давно всем известный хак, работавший еще с версий php 4 (если не ошибаюсь).

По сути это к вопросу как формируются имена защищенных свойств.

Мы можем получить значения так:function _protected(object $obj, string $prop) { return ((array) $obj)["*$prop"];}function _private(object $obj, string $prop) { return ((array) $obj)["".

get_class($obj).

"$prop"];}$foo = _private($pm, 'foo');$bar = _protected($pm, 'bar');Имя приватного свойства формируется как:ClassNamepropertyа protected имеет формат:*propertyРаз заговорили про фан, то мы можем написать универсальную функцию на этом механизме с удобным способом через чейнинг:function crack(object $obj) { return new class ($obj) { public function __construct(object $obj) { $this->o = (array) $obj; $this->c = get_class($obj); } public function __get(string $p) { $r = @$this->o["*$p"]; is_null($r) && $r = @$this->o["{$this->c}$p"]; return $r; } };}$pm = new PublicMorozov();var_dump( crack($pm)->foo ); // 2var_dump( crack($pm)->bar ); // 3— Но производительность такой красоты сильно проседает, естественно.

Кстати, по такой же схеме можно создать экземпляр класса stdClass с приватными и протектекд полями:$obj = (object) [ "stdClassfoo" => 1, "*bar" => 2,];var_dump($obj);object(stdClass)#1 (2) { ["foo":"stdClass":private]=> int(1) ["bar":protected]=> int(2)}— Вообще вы задаете такие интересные вопросы… А чем мне придется тут заниматься?— Оу, ну у нас все хорошо, новые технологии, модный стек.

Просто есть немного легаси кода, который нужно сапортить и, иногда, патчить.

Но, судя по твоим ответам, у тебя все получится, даже не сомневайся.

Мы делаем тебе оффер :)???????????????? ???????????? — анонимный поиск работы без палева где можно найти новую работу без проблем на текущем месте.

Можно создавать как анонимные, так и открытые профили.

Только для IT, никакого “левого” стафа.

Только релевантные предложения.

Скоро будет мега апдейт ;)New.

HR — место где помогают найти работу мечты.

Работаем только с отборными вакансиями в сфере IT & Digital.

Помогаем кандидатам найти работу по душе.

Работодателям — закрыть вакансию быстро и надолго.

Умеем закрывать нетривиальные вакансии и работаем с кандидатами, которые не ищут работу.

.

. More details

Leave a Reply