
Дізнайтесь більше про нові кар'єрні можливості в EchoUA. Цікаві проекти, ринкова оплата, гарний колектив. Надсилайте резюме та приєднуйтеся до нас.
У більшості випадків писати гетери або сетери самому не краще рішення. Генерувати гетери / сетери за допомогою IDE – краще, але не ідеальне. Пакет PHP Properties розв’язує ці проблеми і ” безкоштовно” додає інші можливості.
PHP Properties – це виконана у вигляді трейта реалізація гетерів і сетерів для Вашого класу, яка бере інформацію про нього поля з doc-block.
Використання
Спершу давайте пригадаємо, як створюються звичайні гетери. Може, так?
class Some{ private $property = 23; public function getProperty (){ return $this ->property; }}
Чи так?
/** * @property - read int $property */class Some{ private $property = 23; public function __get ($name) { if ($name === 'property') { return $this ->property; } }}
Виглядає жахливо, особливо якщо таких методів десятки.
Як ми можемо уникнути цього? Саме тут нам на допомогу приходить пакет Properties. Давайте розглянемо його використання на прикладі. Зверніть увагу на doc-block, що йде перед класом:
use SerafimPropertiesProperties;/** * @property - read string $some */class Some{ use Properties; protected $some = 'olololo';}$object = new Some ();echo $object ->some; // => olololo// Ура, це працює! $object ->some = 'new value'; // => Помилка!
Так, це справжня змінна, доступна тільки для читання, – інформація про необхідну поведінку береться з блоку документації /** перед класом. Крім того, цей блок допомагає IDE підсвічувати місця з логічними помилками.
Схожа магія працює і з методами:
use SerafimPropertiesProperties;/** * @property - read int $some * @property - read bool $any */class Some{ use Properties; public function getSome (){ return 42; } public function isAny (){ return true; }}$object = new Some ();$object ->some; // => 42$object->any; // => true
Як щодо запису змінних класу? Це так само просто і магічно:
use SerafimPropertiesProperties;/** * @property - write mixed $value * @property - write mixed $any */
class WritableSome{ use Properties; protected $some; public function setAny ($value) { // }}$object = new WritableSome ();$object ->some = 42; // It works$object ->any = 100500; // It works too// Спробуємо прочитати значення?$object ->some; // => Помилка
Установка
Додати пакет у свій проект нескладно, якщо Ви використовуєте Composer:
composer require serafim/properties
… втім, якщо Ви не використовуєте Composer, то Вам взагалі в житті непросто, правда?
Київ, Харків, Одеса, Дніпро, Запоріжжя, Кривий Ріг, Вінниця, Херсон, Черкаси, Житомир, Хмельницький, Чернівці, Рівне, Івано-Франківськ, Кременчук, Тернопіль, Луцьк, Ужгород, Кам'янець-Подільський, Стрий - за статистикою саме з цих міст програмісти найбільше переїжджають працювати до Львова. А Ви розглядаєте relocate?