0

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

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

if ($var) { // Say hello }

并让它的意思与此相同:

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

我知道这目前不起作用,因为if ($var)检查是否$var已设置。但我要问的是:有没有允许这样做的方法?将不胜感激。

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

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

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

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

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

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

4

4 回答 4

4

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

于 2012-04-04T16:05:48.773 回答
0

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

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

您必须重新设计您的应用程序以使您的代码可靠而不可变。

于 2012-04-04T17:01:24.987 回答
0

为什么不直接使用if ($something == $somethingelse) { // Say hello }?这不是更多的代码。

于 2012-04-04T16:08:21.350 回答
-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 ":-)";

演示:http ://codepad.org/vaELABEm

你甚至可以用它来做其他事情,通过caseswitch.

于 2012-04-04T16:26:04.533 回答