Olá pessoal,
Vou colocar aqui uma dica relacionada a uma situação que me ocorreu.
Estava eu desenvolvendo um programa em PHP que calculasse o método de Newton-Raphson de acordo com a função passada pelo usuário.
O programa requeria os seguintes dados:
- Uma função no formato 2*x+pow(x,3) (por exemplo);
- O valor de x para esta função;
- Outros valores não pertinentes a este artigo.
O meu problema era: como vou colocar o valor de x na função, de modo que a linguagem me retorne o resultado da soma ao invés de uma string?
Para resolver este problema é muito simples, no entanto, ralei um pouco para descobrir por não saber o nome do comando.
A solução é: eval()
Caso você tente substituir os valores de x na função, pelo valor passado pelo usuário, sem usar eval, o cálculo não será feito, e sim, será retornado uma string.
Vamos a um exemplo prático.
É isso aí pessoal, espero que seja útil a alguém isso.
:-)
Vou colocar aqui uma dica relacionada a uma situação que me ocorreu.
Estava eu desenvolvendo um programa em PHP que calculasse o método de Newton-Raphson de acordo com a função passada pelo usuário.
O programa requeria os seguintes dados:
- Uma função no formato 2*x+pow(x,3) (por exemplo);
- O valor de x para esta função;
- Outros valores não pertinentes a este artigo.
O meu problema era: como vou colocar o valor de x na função, de modo que a linguagem me retorne o resultado da soma ao invés de uma string?
Para resolver este problema é muito simples, no entanto, ralei um pouco para descobrir por não saber o nome do comando.
A solução é: eval()
Caso você tente substituir os valores de x na função, pelo valor passado pelo usuário, sem usar eval, o cálculo não será feito, e sim, será retornado uma string.
Vamos a um exemplo prático.
<?php // $x é o valor a ser substituído na função. Vamos supor que $x = 3 function equacao($x) { $f = ""; $new_f = "2*x+pow(x,3)"; // Procura por X, e quando encontra, substitui pelo valor $x na função, // no caso deste exemplo, $x vale 3 for($i = 0; $i < strlen($new_f); $i++) { if($new_f{$i} == "x" || $new_f{$i} == "X") { $f = substr($new_f, 0, $i); $f .= $x; $f .= substr($new_f, $i+1); $new_f = $f; } } // Depois de substituido, a função está assim: 2*$x+pow($x,3) // A idéia é que seja calculado, 2*3+pow(3,3) = 33 eval("\$f = " . $f . ";"); // Retorna o resultado do calculo. // Sem a utilização de eval, seria retornado: 2*$x+pow($x,3) return $f; } ?>
É isso aí pessoal, espero que seja útil a alguém isso.
:-)