2013-01-24 57 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,只是一个简单的旧函数声明也可以做到这一点:) –

相关问题