2011-04-25 49 views
9

Giả sử tôi có một chuỗi, $char. $char == "*".Chuỗi sử dụng PHP làm toán tử

Tôi cũng có hai biến, $ a và $ b, tương đương "4" và "5" tương ứng.

Làm thế nào để tôi nhận được kết quả của $a $char $b, ie 4 * 5 ?

Cảm ơn :)

Trả lời

14

Bạn có thể sử dụng eval() theo đề nghị của @konforce, tuy nhiên con đường an toàn nhất sẽ là một cái gì đó như:

$left = (int)$a; 
$right = (int)$b; 
$result = 0; 
switch($char){ 

    case "*": 
    $result = $left * $right; 
    break; 

case "+"; 
    $result = $left + $right; 
    break; 
// etc 

} 
+0

đó là câu trả lời tôi đang tìm kiếm :) – felamaslen

+0

Vui vì tôi có thể giúp :) Chúc may mắn! –

6

Phương pháp dễ nhất nhưng nguy hiểm nhất là sử dụng eval.

$c = eval("return $a $char $b;"); 
+2

nhưng tránh eval. –

+1

@Shakti, tôi sẽ tránh 'eval' cho mã sản xuất. – Matthew

+0

Tôi không muốn sử dụng eval vì các giá trị đến từ đầu vào của người dùng. – felamaslen

1

hãy xem chức năng eval(). bạn sẽ cần phải xây dựng một lệnh php thích hợp và chạy bên trong eval() để trích xuất kết quả.

1

Bạn có thể làm gì với eval Tuy nhiên tôi sẽ không đề nghị sử dụng eval.

Nếu có điều hành trường hợp có thể bởi bất cứ điều gì bạn nên kiểm tra những gì nhà điều hành là trước khi sử dụng

switch($char) 
{ 
    case '*': 
    $result= $a * $b; 
    break; 

    case '+': 
    $result= $a + $b; 
    break; 
} 
+0

Có, tôi sẽ đi với tùy chọn đó. Cảm ơn :) – felamaslen

7

phương pháp an toàn nhất là một cấu trúc switch:

function my_operator($a, $b, $char) { 
    switch($char) { 
     case '=': return $a = $b; 
     case '*': return $a * $b; 
     case '+': return $a + $b; 
     etc... 
    } 
} 
+0

vâng ... mọi người trả lời quá nhanh! – felamaslen

+2

nếu toán tử là '=' mã của bạn sẽ tạo 'tổng hợp' của toán hạng. Không nên có một 'break'? –

+0

'=' sẽ không làm bất kỳ điều gì trong trường hợp này, trừ khi $ a được chuyển vào làm tham chiếu. Nhiệm vụ sẽ bị mất ngay sau khi hàm trả về, ngược lại. Nó chỉ là một ví dụ. –

Các vấn đề liên quan