php – передача оператора функции

Можно ли передать оператор функции? Как это:

function operation($a, $b, $operator = +) { return $a ($operator) $b; } 

Я знаю, что могу сделать это, передав $ operator в виде строки и используя switch { case '+':... } . Но мне было просто любопытно.

Related of "php – передача оператора функции"

Невозможно перегрузить операторов в 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; }