Bueno, pues no conocía esta función muy bien.. hasta que apareció en el momento que la necesitaba... pero como raro, no sabía que era para lo que queria hacer.
Tengo un pequeño ejemplo de un script en php que recibes 2 números y seleccionas en un combobox una de las operaciones (suma, resta, division, multiplicacion) + - / *.
Pues bien, la estructura de la función la hize asi:
function calcularOperacion($valor1,$valor2,$operador)
claro, donde el detalle mas importante es la variable $operador que representa en este caso si es suma, resta, multiplicacion ó división, para lo cual me interesaba mucho que interpretara el respectivo simbolo del operador (+ ,- ,* ,/ ). Pero desde luego lo intentaba en el cuerpo de la función:
function calcularOperacion($valor1,$valor2,$operador)
{
$resultado=$valor1.$operador.$valor2;
return $resultado;
}
Pero claro, esto no es tan sencillo.... ahí solo concatenaría las variables , si usara la función calcularOperacion(5,4,+); entonces como resultado me retornaría 5+4 y no efectuaría la operación como tal.
Pues bien, busqué, Googlié, y de todo busqué funciones de cadenas , conversión, etc.. sin tener éxito alguno. recurrí a la clásica y cutre solución de usar el switch :S
function calcularOperacion($valor1,$valor2,$operador)
{
switch($operador)
{
case 0:
$resultado = $valor1 + $valor2;
break;
case 1:
$resultado = $valor1 - $valor2;
break;
case 2:
$resultado = $valor1 * $valor2;
break;
case 3:
$resultado = $valor1 / $valor2;
break;
}
return $resultado;
}
Muy cutre.... pero bueno, me funcionaba de acuerdo al requerimiento, obviamente no muy óptima y pues, lógico que mas consumo de recursos, etc...
Bien, dejando unos días como solución este algoritmo, me dió por curiosear y buscar a ver si existía el código de la calculadora en php. Me topé con un codigo hecho con los mismos parametros, 2 números y un operador pero hecho en javascript. Desde luego evalué la lógica y me llamó la atención una función llamada eval();
Aja... nuevamente a Googlear, y pues claro, me da por digitar eval en el editor de php y me la reconocía :O bien... googleando me dí cuenta de que esta función esta en algunos lenguajes, php, javascript, python, y después de leer algunos ejemplos de código hasta en el mismo
tutorial oficial de php , logré entenderla.
Bien, según entiendo lo que hace eval($cadena); es evaluar una cadena que le pasas y la evalúa para ver si es código ejecutable, como quien dice para que guardes código fuente en una variable.
y claro claro,,, la función se redujo a una sola línea:
function calcularOperacion($valor1,$valor2,$operador)
{
eval("echo $valor1 $operador $valor2;");
}
llamandola con parámetros:
calcularOperación(4,5,+);
fíjense que el valor de la cadena que se le pasa a eval es : echo $valor1 $operador $valor2;
donde prácticamente es una línea de código normal en php en la cual sus variables tienen un valor asignado, pero aqui si gracias a la función evalúa que esté bien codificado e interpreta la cadena como una linea normal de código. Entonces sí logré hacer lo que en un principio quería :D
Bien, eso ha sido todo.... uff, que mana de carreta