Можно ли передать оператор функции? Как это:
function operation($a, $b, $operator = +) { return $a ($operator) $b; }
Я знаю, что могу сделать это, передав $ operator в виде строки и используя switch { case '+':... }
. Но мне было просто любопытно.
Невозможно перегрузить операторов в php, но есть обходной путь. Вы могли бы, например, передать функции add, sub, mul и т. Д.
function add($a, $b) { return $a+$b; } function sub($a, $b) { return $a-$b; } function mul($a, $b) { return $a*$b; }
И тогда вы будете что-то вроде:
function operation($a, $b, $operator = add) { return $operator($a, $b); }
Попробуйте, вы не можете передать операторов в функции, ВЫ МОЖЕТЕ ИСПОЛЬЗОВАТЬ НАЗВАНИЕ ФУНКЦИИ, КАК ДОБАВИТЬ, СУБТРАКЦИЯ, МУЛЬТИПЛИКАЦИЯ … и т. Д.
function operation($a, $b, $operator ='ADDITION') { $operator($a, $b); } function ADDITION($a, $b){ return $a + $b; }
Это можно сделать, используя функцию eval as
function calculate($a,$b,$operator) { eval("echo $a $operator $b ;"); } calculate(5,6,"*");
Благодарю.
Я знаю, что вы конкретно упоминаете не использование инструкции switch здесь, но я думаю, что важно показать, как это можно настроить с помощью операторов switch, поскольку, на мой взгляд, это самый простой, безопасный и удобный способ сделать это.
function calculate($a, $b, $operator) { switch($operator) { case "+": return $a+$b; case "-": return $a-$b; case "*": return $a*$b; case "/": return $a/$b; default: //handle unrecognized operators } return false; }