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.
:-)