PHP从字面上取一个If语句中的变量

时间:2012-04-04 16:02:50

标签: php

我想知道是否可以这样做:

$var = '$something == $somethingelse';

if ($var) { // Say hello }

并且意思与此相同:

if ($something == $somethingelse) { // Say hello }

我知道目前无效,因为if ($var)会检查是否设置了$var。但我要问的是:有没有办法允许这个?希望得到答案。

编辑: 基本上我觉得我应该解释为什么我这样做。 我希望用户能够根据他们的某个“频道”保存的某些数据来控制何时收到通知。

例如,用户只想在收集的数据大于60时收到通知。所以我会让他们选择两个字段:

第一个字段输入的数字(int或float)

第二个字段选择(等于,<,>,=<,=>)

这个if语句的最后一件事是他们的数据是由他们的“频道”收集的。

然后我希望能够以某种方式将他们的选择保存在数据库中,然后根据他们的选择采取行动。

4 个答案:

答案 0 :(得分:4)

The eval()语言构造非常危险,因为它允许执行任意PHP代码。因此不鼓励使用它。如果您已经仔细验证除了使用此构造之外没有其他选择,请特别注意不要将任何用户提供的数据传递到其中,而不事先正确验证它。

答案 1 :(得分:0)

为什么不使用if ($something == $somethingelse) { // Say hello }?它不是那么多代码。

答案 2 :(得分:0)

如果您提出这个问题,那么您的设计就会出现问题。

将代码与数据混合(你实际在做什么)是程序员可以做的最糟糕的事情之一。它会使你的代码无法维护和不安全。

您必须重新设计应用程序,以使代码稳固而不变。

答案 3 :(得分:-1)

你说这个字符串是由你在其他地方生成的。我建议,不要生成一个字符串,而是生成一个数组。

像这样:array('something','==','somethingelse')

现在,当您想要处理它时,您可以用它们的值替换变量,然后检查运算符并运行正确的操作。

这样的事情:

$x = array('something','==','somethingelse');
list($valA, $operation, $valB) = $x;

// Replace values
$valA = $$valA;
$valB = $$valB;

// Run operation
$result = false;
switch($operation){
    case '==':
        $result = $valA == $valB;
        break;
    default:
        break;
}
if($result) echo ":-)";

DEMO:http://codepad.org/vaELABEm

您甚至可以通过向case添加更多switch来执行其他操作。