2011-01-17 2 views
1

I는 + 또는 - 두 정수 변수 $initial$unit과 같은 값을 가질 수있는 문자열 변수 $operation을 갖는다.PHP - 연산자로서 문자열을 이용하여 산술 연산은

그래서 나는 IF없이이 작업을 수행 할 수있는 방법이 있나요 내가

if($operation == '+') echo ($initial + $unit); 
if($operation == '-') echo ($initial - $unit); 

같은 것을 사용할 필요가 그들 사이의 산술 연산

의 결과를 반향?

당신은지도를 사용할 수
+1

중복 가능성 http://stackoverflow.com/questions/2552052/variable-operators-in-php) 지금까지 다양한 답변으로부터 –

+1

, 나는 묻고 싶습니다 * 왜? *. –

+0

예,이 질문을하는 것은 매우 어리 석습니다. 내가 게시 한 짧은 IF 예를 계속 사용하겠습니다. – Alex

답변

3

속임수 : ... 만 첨가하여 있지만 음극 곱한으로 부정

echo $initial + (($operation == '-') ? -1 : 1) * $unit; 

[PHP 변수 연산자 (:)의

3

, eval으로 즉

function add($a, $b) { return $a + $b; } 
function sub($a, $b) { return $a - $b; } 

$operations = array('+' => 'add', '-' => 'sub'); 

$operations[$operation]($initial, $unit); 
0

.

하지만 무엇이든을 수유하기 전에 허용 목록을 확인해야합니다. eval. 수학과

if(in_array($operation, array('+', '-'))){ 
    eval('echo $initial '.$operation.' $unit;'); 
} 
+0

eval()을 사용할 수 있지만 실제로는 사용하면 안됩니다. 특히 더 나은 옵션을 사용할 수있는 경우. –

+1

"하지만 이전에 화이트리스트 검증을했는지 확인하십시오 ..."이것이 당신에게 무엇을 말합니까? 나는 예제를 추가했다. 제발 저에게 계몽하고 잘못 된 것이 무엇인지 설명하십시오. 검증을하지 않으면 PHP에서 많은 일을하지 않아야합니다. 이 원칙에 따라 사용자가 입력 한 내용을 데이터베이스에 저장하지 않아야하지만 일부 사람들은 여전히 ​​그렇게하는 경향이 있습니다. –

+0

예제를 사용하여 편집하면 더욱 명확하고 안전하다고 생각합니다. 하지만 항상 누군가가 평가 링크를보고 결코 화이트리스트 부분을 얻으려는 위험이 있습니다. –

1
echo ($operation == '+') ? $initial + $unit : $initial - $unit; 
+0

'echo $ initial + ($ operation == '+'? $ 단위 : - $ 단위);' –