我正在尝试理解这段代码而我不能:(
$time = date('Y-m-d', strtotime('-30 days'));
$what = create_function('$a', 'return $a.'.'"'." AND date > '$time'".'"'.';');
为什么$time
变量在这个创建的函数中成功传递,但是当我尝试:
$limit = 10;
$what = create_function('$a', 'return '.'"'." LIMIT '$limit'".'"'.';');
$limit
不是吗?
ps:如果我尝试$what = create_function('$a', 'return '.'"'." LIMIT 10".'"'.';');
它可以工作......
答案 0 :(得分:2)
代码可以大大简化:
$what = create_function('$a', "return \"LIMIT $limit\";");
或
$what = create_function('$a', 'return "LIMIT ' . $limit .'";');
代码应该有效。请注意,LIMIT
之后的数字不能用SQL语法中的引号括起来。
但是在创建函数时,您还可以将$limit
作为参数传递给函数:
$what = create_function('$limit', 'return "LIMIT $limit";');
$str = $what(10);
或根本不使用create_function
,只是直接进行字符串连接:
$str = 'LIMIT ' . $limit;
答案 1 :(得分:2)
当您的串联字符串时,您的代码看起来有点混乱,尝试更简单的方法:
create_function('$a', sprintf('return "LIMIT %d"',$limit));
如果你不介意我问,你为什么要创建一个函数来返回一个简单的字符串?
答案 2 :(得分:1)
您的示例中很难阅读并区分'
和"
。
试试这个:
$what = create_function('$a', "return \"LIMIT $limit;\"");
以及
$what = create_function('$a', 'return \'LIMIT $limit;\'');
或者
$what = create_function('$a', 'return "LIMIT '.$limit.';"'); // most clear, I think
您可以使用\
作为转义字符,这意味着如果它是当前引号字符,则此后的下一个字符将不会被解释为结束引号。
示例:
echo '\''; // will output '
echo '\"'; // will output \"
echo "\""; // will output "
答案 3 :(得分:1)
我刚刚测试了你的第二个代码,它正常传递$limit
:
<?php
$limit = 10;
$what = create_function('$a', 'return '.'"'." LIMIT '$limit'".'"'.';');
echo $what(2);// note: `2` was randomly chosen, and used because $what expects an argument
// result: ` LIMIT '10'`
?>
上述$what
行可以改写为:
$what = create_function('$a', 'return "' . " LIMIT '$limit'" . '";');
请注意,您不小心将其写为(请注意$limit
周围的引号字符:
$what = create_function('$a', 'return "' . ' LIMIT "$limit"' . '";');
在这种情况下,$limit
不会被10
取代($limit
的值)。
答案 4 :(得分:1)
首先,我想知道您使用create_function
的原因?如果有任何机会(通常有),你应该尽量避免使用它,因为这通常导致代码非常粗糙。
我注意到的第一件事是你的第二个例子对$a
没有做任何事情:
$what = create_function('$a', 'return '.'"'." LIMIT '$limit'".'"'.';');
应该是:
$what = create_function('$a', 'return $a . '.'"'." LIMIT '$limit'".'"'.';');
此外,在连接字符串时,请尝试用空格包围.
。它将使您的代码更具可读性(因此,可调试)。最后,在双引号和单引号上轻松一下:)
答案 5 :(得分:0)
在create_function中,$limit
是单引号;您应该将其包含在双引号("LIMIT $limit"
)中,还是使用连接(.
)运算符(如下所示:'".$limit."'
)。