2016-10-19 2 views
0

私はPHPで電卓を作ろうとしていますが、数を追加するためにphpで関数を書いていますが、それを追加するのではなく、タスクを実行します。私たちは文字列をphpのサインに変換できますか?

function cal($val1 , $opt , $val2){ 
    return $sum = $val1 . $opt . $val2; 
} 

私はこの関数を呼んでいる場合は今、同じよう:

echo cal(4,"+",5); 

それは4+5を返しますが、私は答え ため9を探していますが、$ optは代わりに演算子として機能することを可能にすることができますと文字列の私は加算や減算のような演算子に基づいて

+0

、 'CONCATENATE .'は、連結演算子です...ので、どのようにそれが何を行う必要があります*が、*? –

+0

'eval()' – Mohammad

+3

@Mohammadを使うべきです。絶対に他の方法がない限り、 'eval()'を決して使うべきではありません。この場合はあります。オペレータが何であるかを見て、その機能を実装します。 –

答えて

1

if文またはスイッチケース1を行う必要があります。

if ($opt =='+'){ 
    return $val1+$val2; 
}else if($opt =='-'){ 
    return $val1-$val2; 
} .... etc 
0

あなたはコードとしてeval()実行文字列を使用することができます。値を使用する前にチェックする必要があります。

function cal($val1 , $opt , $val2){ 
    if (is_numeric($val1, $val2) && preg_match("/[+-\/\*%]/", $opt)) 
     return eval($val1 . $opt . $val2); 
} 
0

もよあなたは、この目的のためにevalを使用していますが、慎重にあなたのデータを検証することができ

switch ($opt) { 
    case "+": 
    echo $val1 + $val2; 
    break; 
    case "-": 
    echo $val1 - $val2;; 
    break; 
    case "*": 
    echo $val1 * $val2;; 
    break; 
    ... 
    default: 
    code to be executed if $opt is different from all labels; 
} 
0

のようなあなたのプログラム のための非常に基本的なアプローチを使用することができます。これはマニュアル状態での助言として:

eval()言語構造は、任意のPHPコードを実行できるので非常に危険です。したがってその使用はお勧めしません。このコンストラクトを使用する以外の選択肢がないことを慎重に確認した場合は、あらかじめ適切に検証することなく、ユーザーが提供したデータを渡すことに注意してください。うまく

function cal($val1 , $opt , $val2) 
{ 
    if (!is_numeric($val1)) return false; 
    if (!is_numeric($val2)) return false; 
    if (!in_array($opt, ["+", "-", "*", "/"])) return false; 

    return eval("return $val1 $opt $val2;"); 
} 

echo cal(3.2, "*", 4.2); 

Live example

関連する問題