0

我试图理解这段代码,但我不能:(

$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".'"'.';');它的工作...

4

6 回答 6

2

代码可以大大简化:

$what = create_function('$a', "return \"LIMIT $limit\";");

或者

$what = create_function('$a', 'return "LIMIT ' .  $limit .'";');

代码应该可以工作。请注意,LIMITSQL 语法中不能将后面的数字括在引号中。

但是当你创建一个函数时,你也可以$limit作为参数传递给函数:

$what = create_function('$limit', 'return "LIMIT $limit";');
$str = $what(10);

或者根本不使用create_function,直接进行字符串连接:

$str = 'LIMIT ' . $limit;
于 2011-02-14T13:36:54.793 回答
2

当您连接字符串时,您的代码似乎有点混乱,请尝试更简单的方法:

create_function('$a', sprintf('return "LIMIT %d"',$limit));

如果你不介意我问,你为什么要创建一个函数来返回一个简单的字符串?

于 2011-02-14T13:37:14.073 回答
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 "
于 2011-02-14T13:30:03.630 回答
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)取代。

于 2011-02-14T13:31:14.043 回答
1

首先,我想知道您为什么要使用create_function? 如果有任何机会(通常有),你应该尽量避免它,因为这通常会导致非常草率的代码。

我注意到的第一件事是你的第二个例子没有做任何事情$a

$what = create_function('$a', 'return '.'"'." LIMIT '$limit'".'"'.';');

应该是:

$what = create_function('$a', 'return $a . '.'"'." LIMIT '$limit'".'"'.';');

此外,在连接字符串时,请尝试将.空格括起来。它将使您的代码更具可读性(因此,可调试)。最后,在双引号和单引号上放轻松:)

于 2011-02-14T13:32:08.227 回答
0

在 create_function 中,$limit是单引号;您应该将其包含在双引号 ( "LIMIT $limit") 中或使用连接 ( .) 运算符(如:) '".$limit."'

于 2011-12-05T05:59:03.623 回答