PHP Profi

RFC: Перегрузка операторов

Буквально сразу после Нового года (02.01.2016) был предложен новый RFC. Это предложение о введении в PHP перегрузки операторов. RFC был предложен Patricio Tarantino и Sara Golemon и предлагается добавить эту возможность в версии 7.1.

Итак, что же такое перегрузка операторов, и как это будет выглядеть в PHP?

Что такое перегрузка операторов?

Если вы уже сталкивались с этой возможностью в других языках, смело листайте до следующего подзаголовка.

Перегрузка операторов – это возможность (пере)определить поведение привычных операторов сложение, вычитание и т. п., своим собственным. Таким образом, выполнение многих операций становится простым, понятным и элегантным. Наиболее распространённым применением являются комплексные числа, вектора, матрицы.

Например, мы хотим создать класс для представления вектора. Предположим $a и $b - переменные типа Вектор. Тогда, если мы хотим сложить их или умножить, мы должны были бы использовать пользовательскую функцию. Тем не менее, было бы неплохо, если бы мы могли перегрузить операторы + и * для этого типа, и просто использовать $a + $b или $a * $b.

 

Перегрузка операторов в PHP

Напомню, что документ находится в стадии черновика и всё ещё может трижды поменяться. Но всё же на данный момент предлагается следующее.

Все, конечно же, знают полюбившиеся магические методы классов (__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.

2016-01-20

Последние посты

Комментарии

авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий