2013-01-24 106 views
3

我試圖模塊化一個很長的if..else函數。我可以在字符串中存儲邏輯比較嗎?

$condition = "$a < $b"; 
if($condition) 
{ 
    $c++; 
} 

是否有任何方法將文字字符串翻譯成邏輯表達式?

+1

*您可以用*'eval'做到這一點,但標準的做法是,也許定義一組函數... –

+0

你應該解釋一下,你對「模塊化」意味着什麼。 –

+0

請顯示你冗長的if..else塊(不是功能)。我幾乎可以肯定,解決方案不是'模塊化'。 – markus

回答

7

我想模塊化一個冗長的if..else函數。

你不需要把條件爲一個字符串,只存儲布爾truefalse:爲$ a和$ b

值定義之間可能會改變條件及其用法

一種解決方案是閉合(假設定義和用法在同一範圍內發生):

$condition = function() use (&$a, &$b) { 
    return $a < $b; 
} 
$a = 1; 
$b = 2; 
if ($condition()) { 
    echo 'a is less than b'; 
} 

但我不知道這對你是否合理,而不需要知道你正在努力完成什麼。

+0

$ a和$ b的值可能會在$ condition的定義和它的用法之間變化。 – hek2mgl

+1

然後你可以將它定義爲閉包。請參閱編輯。 –

+0

如果你刪除上面的關閉東西的部分,這將是最好的答案(它已經是:)) – hek2mgl

-4
<?php 
    $a=0; 
    $b=1; 
    function resultofcondition() 
    { 
     global $a,$b; 
     return $a<$b; 
    } 
    if(resultofcondition()){ 
     echo " You are dumb,"; 
    }else{ 
     echo " I am dumb,"; 
    } 
    $a=1; 
    $b=0; 
    if(resultofcondition()){ 
     echo " You were correct."; 
    }else{ 
     echo " in your face."; 
    } 
?> 

事實上感謝評論說出來,缺少全局參數,對於那些誰否決了,什麼話該代碼輸出? ¬_有興趣xD

+1

這在PHP中不起作用,'$ a'和'$ b'在函數範圍中不可用。 –

+0

他們是.-。 .-。 –

+0

@RicardoOrtegaMagaña他們當然不是,除非你使用'global $ a,$ b;' –

1

你可以使用eval來做到這一點。不知道爲什麼你不會立即評估病情,但。

+1

'eval'永遠不是問題的解決方案。我們應該避免使用它。 – Kasyx

2

使用拉姆達如果你知道有足夠的判斷結果變量

$f = function ($a, $b) { return $a < $b; } 

if ($f($x, $y)){} 
+0

+1。雖然你不需要這裏的lambda,只是一個簡單的舊函數聲明也可以做到這一點:) –

相關問題