Квест → Как хакнуть форму
Прошли: 77
Буквально сразу после Нового года (02.01.2016) был предложен новый RFC. Это предложение о введении в PHP перегрузки операторов. RFC был предложен Patricio Tarantino и Sara Golemon и предлагается добавить эту возможность в версии 7.1.
Итак, что же такое перегрузка операторов, и как это будет выглядеть в PHP?
Если вы уже сталкивались с этой возможностью в других языках, смело листайте до следующего подзаголовка.
Перегрузка операторов – это возможность (пере)определить поведение привычных операторов сложение, вычитание и т. п., своим собственным. Таким образом, выполнение многих операций становится простым, понятным и элегантным. Наиболее распространённым применением являются комплексные числа, вектора, матрицы.
Например, мы хотим создать класс для представления вектора. Предположим $a и $b - переменные типа Вектор. Тогда, если мы хотим сложить их или умножить, мы должны были бы использовать пользовательскую функцию. Тем не менее, было бы неплохо, если бы мы могли перегрузить операторы + и * для этого типа, и просто использовать $a + $b или $a * $b.
Напомню, что документ находится в стадии черновика и всё ещё может трижды поменяться. Но всё же на данный момент предлагается следующее.
Все, конечно же, знают полюбившиеся магические методы классов (__get, __set, __call...). Сейчас мы уже и не представляем себе PHP без них. На данный момент перегрузку операторов предлагается реализовать с помощью дополнительных магических методов, а именно:
public function __add($__value__); // Перегрузка оператора + public function __sub($__value__); // Перегрузка оператора - public function __mul($__value__); // Перегрузка оператора * public function __div($__value__); // Перегрузка оператора / public function __pow($__value__); // Перегрузка оператора ** public function __concat($__value__); // Перегрузка оператора .
Кроме этого, в RFC поднимается вопрос о том, стоит ли для этих целей добавить в PHP интерфейс, описывающий требования реализации таких методов, подобно ArrayAccess. А также предложено будущее развитие функционала для перегрузки "остатка от деления"(%), сдвигов (<<, >>), булевых операторов (|, &, ^,), операторов сравнения (>, <, ==, !=, >=, <=), в том числе строго сравнения (===, !==), операторов присвоения (+=, -=, *=, .=, &=, |=, ...) и операторов инкремента и декремента (++$a, --$a, $a++, $a--).
Описание RFC вы можете найти на официальном сайте PHP.