Досить створювати гетери і сетери: огляд пакета PHP Properties, що розширює мову


Дізнайтесь більше про нові кар'єрні можливості в 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?


Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *