PHP if语句是否可以包含所有变量?
真的很简单的问题。我遇到了一个工作问题,在这种情况下,将<= < =和==存储为一个变量,以便在某些情况下可以吐出某些if语句。PHP if语句是否可以包含所有变量?
$numb1 = 5
$numb2 = 10
$option = >=
if($numb1 $option $numb2)
你不能在控制指令中放置一个var来测试它。 这将返回一些:syntax error, unexpected T_VARIABLE
你可以使用一些eval()来做到这一点,但这是不可取的。
Perhap的你可以做的东西有以下不同:
$option=$_GET['option']; // or POST or something else...
$numb1 = 5;
$numb2 = 10;
switch($option) {
case ">=":
if($numb1 >= $numb2){//someting}
break;
case "<=":
if($numb1 <= $numb2){//someting}
break;
case "==":
if($numb1 == $numb2){//someting}
break;
default://something else if there is no $option
break;
}
或者通过类似以下的
function testVar($numb1,$numb2,$option)
{
// Same switch
}
我还没有使用开关,虽然我正在检查atm。 – user1707616 2013-02-14 02:13:22
但是,在常规的IF/ELSEIF语句中使用它有什么好处? – user1707616 2013-02-14 02:17:27
在这种情况下对我来说更清洁。使用if()和elseif(),嵌套if(){if()} elseif {if()}的可见性会降低... – Valky 2013-02-14 02:21:14
如果不使用eval()
通常被认为是一个坏主意
这将如何工作?此外,为什么它被认为是一个坏主意?现在我有 ==存储在SQL中,我做检查,先看看它是哪个,然后继续正确的如果语句 – user1707616 2013-02-14 01:58:44
你必须非常小心,以确保eval永远不会接受用户输入。即使你100%确定你,使用开关和if-else结构仍然更安全,而不是冒险。如果沿着某人看到你的功能的轨道下去,并认为“这看起来很方便”,并没有意识到eval()的潜在后果,所以他们将用户输入作为参数之一发送到函数中...... – 2013-02-14 02:03:08
变量用于eval()是静态的,并通过选择列表设置,然后存储在SQL中。因此,我确切知道我想在声明中将会发生什么。 – user1707616 2013-02-14 02:06:55
直接做它这样,只会使用eval()工作 - 使用eval不被认为是很好的做法。主要的问题是,如果eval()语句需要用户输入,用户可以将PHP注入代码中。这显然很糟糕。请参考此线程 - When is eval evil in php?
您最好做的是为所有各种操作(例如“大于”,“小于”,“等于”等等)创建一系列开关语句...
好吧这么长的故事短我正在做它正确的方式。我只是想确保我没有那样的东西。谢谢! – user1707616 2013-02-14 02:01:40
实际上,考虑到这一点,eval()被认为是不好的事情,如果用户输入了什么会去那里是正确的?对于这种情况,我使用了预设为和==的选择列表。这也许说使用eval()更合理吗? – user1707616 2013-02-14 02:04:02
如果您正在使用选择列表,则用户已输入,在这种情况下,绝对不应使用eval()。即使您正在使用选择框来限制输入,但这只是伪安全性,因为没有什么可以阻止用户使用萤火虫或任何其他工具操纵HTML页面,将选项的值更改为某些恶意代码,然后发布这种形式到您的Web服务器。 – 2013-02-14 02:06:58
要做到这一点最好的办法是做一个函数调用或对象包装,然后调用函数来实现相同的结果。
实施例:
$func = '__my_eq_op_';
if ($func($numb1,$numb2)) {
// Do stuff
}
的操作功能然后...
例如。所以你可以把它分解成使用函数。
对于此:
如果($ X == $ y)的
解析器看到6个令牌... 1)KEYWORD IF: 2)LPAREN 3)VAR X 4) EQ 5)VAR Y 6)RPAREN
解析器使用这些标记为IF条件构造AST。你的思想需要摆脱将“==”看作一个变量。这是一个操作员!
我认为这个答案可能是另一个好方法,但我对功能还不完全熟悉。他们很难以我想象的方式获得把握。 – user1707616 2013-02-14 02:11:36
不错的想法+1,但“东西”将永远是一样的,我不知道这可能会有用... – Valky 2013-02-14 02:15:28
一般来说没有太多的事情要做。 > =和 2013-02-14 02:17:04
考虑如果/ elseif的/ elseif使用功能? – Mirco 2013-02-14 01:56:35
这就是我目前正在做的事情,但我想知道是否有另一种选择。目前我正在说... if $ option ='==' if $ numb1 == $ numb2 – user1707616 2013-02-14 01:59:30