CTO Vetmanager, PHP Developer, Ironman 70.3

Elegant Way в php

Кто не слышал про Elegant Objects? Советую познакомиться и с концепцией и с её автором. Даже если вы с автором не согласны, вам не будет скучно.

Чтобы ваши объекты были элегантными, они должны соотвествовать принципам:

  • No null
  • No code in constructors
  • No getters and setters
  • No mutable objects
  • No readers, parsers, controllers, sorters, and so on
  • No static methods, not even private ones
  • No instanceof, type casting, or reflection
  • No public methods without a contract (interface)
  • No statements in test methods except assertThat
  • No ORM or ActiveRecord
  • No implementation inheritance

Мне нравится код, который получается в итоге. В мире php нашел ребят, которые уже написали несколько оберток над стандартными php функциями - elegant-bro.

Например Arrayee - библиотека для элегантной работы с массивами

# Чтобы из простого массива получить элегантный
$elegantArray = new Just([1, 2, 3]);
# Чтобы вернуться к простому массиву
$notElegantArray = $elegantArray->asArray();
# объеденим 2 массивам 
$megred = new Merged(
    new Just([1, 2, 3]),
    new Just([4, 5, 6])
);
# умножим на 2 все элементы
$mapped = new Mapped(
    $merged,
    function ($item) {
        return $item*2;
    }
);
# ... сделаем что-то еще с классами Reversed, Sorted, JsonDecoded
# и получим обработанный массив когда он будет нам нужен
$mapped->asArray();

Можно строить матрешки из классов разделяя ответсвенность. Мне нравится, а вам?