bxnotes.ru
  • конспекты
  • статьи
Angular в конспектах Angular Bitrix в конспектах Bitrix Git в конспектах Git Js в конспектах Js Linux в конспектах Linux MySQL в конспектах MySQL Php в конспектах Php React в конспектах React
Angular в статьях Angular Bitrix в статьях Bitrix Git в статьях Git Js в статьях Js Linux в статьях Linux MySQL в статьях MySQL Php в статьях Php React в статьях React
Главная
Статьи
php
Даже обычные объекты вызываемы
Статья из конспекта "Functional PHP":
  • Введение
  • Какую версию PHP использовать?
  • Здравствуй, FP
  • Декларативный код
  • Иммутабельный дизайн
  • Чистые функции защищают от сайд эффекта
  • Ссылочная прозрачность
  • Взгляд на функциональную декомпозицию
  • Функции первого класса и функции высшего порядка
  • Присваивание к переменной
  • Возвращение функции
  • Параметры
  • Даже обычные объекты вызываемы
  • Использование контейнеров для улучшения API
  • Замыкания

Даже обычные объекты вызываемы

PHP Магический метод invoke()

__invoke() __construct()
Использование магического метода invoke() для запуска объекта как функции
Источник — Functional PHP:
В конспекте →

Синтаксис анонимной функции на самом деле компилируется в объект Closure с методом __invoke(). Данный метод позволяет объекту быть вызываемым. Рассмотрим следующий пример с точки зрения функционального программирования:

<?php
class Counter {
private $_value;
public function __construct($init) {
$this->_value = $init;
}
public function increment(): int {
return $this->_value++;
}
public function __invoke() {
return $this->increment()
}
}
$c = new Counter(0);
$c(); //-> 1
$c(); //-> 2
$c(); //-> 3
hosted with ❤ by bxnotes
С точки зрения функционального программирования, наличие внешней переменной по отношению к функции является сайд эффектом, такая функция не является чистой. Но на практике, эта переменная является приватной, она инкапсулирована в класс и ее можно безопасно использовать. Тем не менее, для функционального программирования предпочтительнее полностью избавиться от сайд эффекта, разделив поведение и состояние. Это можно достигнуть, декларируя переменную для каждых данных, которые мы желаем получить.
<?php
class Counter {
//...
public static function increment(int $val): int {
return $val + 1;
}
}
Counter::increment(100); //-> 101
hosted with ❤ by bxnotes

Источник — Functional PHP:
В конспекте →
Опубликовано 23.09.2018

© 2017–2018 bxnotes
конспекты веб разработчика
feedback@bxnotes.ru