Comments 11
Пожалуйста, не надо перегрузки операторов.
$object1 + $object2
Ранее всегда было ясно, что в данном контексте в условно хорошем коде будут int/float.
Иногда нужно работать либо с большими числами, либо с числами с фиксированной точностью, либо с большой мантиссой. Для этого в PHP удобных нативных инструментов нет.
Для организации Decimal существует экстеншн: https://github.com/php-decimal/ext-decimal. Как раз там как бы реализована перегрузка операторов на уровне экстеншна, то есть:
$foo = new Decimal("0.1");
$bar = new Decimal("0.2");
$baz = $foo + $bar;
echo $baz->toString(); // "0.3"
Также небезвестное решение: https://github.com/brick/math. В этом случае используются методы вроде sum(...)
Всё же, привычные арифметические операторы были бы удобны здесь. Но остаётся открытым вопрос сложения, например, нативного int
с каким-то BigInteger
.
Хотелось бы остановиться на том, что результатом операций с привычными бинарными операторами будут числа в том или ином представлении (тот же BigInteger
или Decimal
). Дальше уже вопросы типизации.
Для меня ещё с PHP4 загадка, почему array_merge() не имеет синонима в виде обычного "+"
потому что обычный "+" уже делает свою работу https://www.php.net/manual/en/language.operators.array.php
Уже довольно давно это совсем не очевидно:
Просто можно было делать только из расширений, а не из самого языка.
Согласен в комментариями выше - функционал действительно не помешает, и есть ряд задач, для которые приемлемо выполнение арифметических выражений над объектами, работа с теми же множествами, длинная арифметика и прочее..
Что касается варианта реализации:
с одной стороны, хорошо бы придерживаться тех. же магических методов,
но с другой стороны:
1. будут сложности с неймингом операторов.
2. кол-во маг. методов будет сильно возрастет.
мне кажется, вариант с operator лучше.
Shardj/zf1-future — Ребятки поддерживают форк ZendFramework 1 совместимый с PHP 8.
Никак не закопают стюардессу :)
Macroable из фреймворка Laravel — совершенно ужасная фича, убивающая статанализ и рефакторинг.
PHP Дайджест № 217 (1 – 13 декабря 2021)