4

更多的是出于兴趣...

$_GET['unique'] = blahblahblah=this_is_what_im_interested_in

我知道我可以像这样得到第二个元素:

$words = explode('=', $_GET['unique']);
echo $words[1];

有没有办法在一行中得到这个?- 那将“希望”允许我将其添加到函数/对象调用中:

$common->resetPasswordReply(... in here I would put it....);

喜欢

$common->resetPasswordReply(explode('=', $_GET['unique'])[1]);

我只是有兴趣看看这是否可能。

4

3 回答 3

8

如果函数返回数组/对象,PHP 支持对函数进行索引;所以以下也可以:

echo explode('=', $_GET['unique'])[1];

编辑

这被称为数组解引用,并已在 PHP 文档中介绍:

从 PHP 5.4 开始,可以直接对函数或方法调用的结果进行数组取消引用。以前只能使用临时变量。

从 PHP 5.5 开始,可以取消对数组文字的数组引用。

于 2013-06-12T04:55:31.500 回答
1

这应该为你做。

substr($str, strpos($str, "=")+1);
于 2013-06-12T05:01:27.460 回答
1

奇怪的是,您可以“几乎”使用list()执行此操作,但您不能在函数调用中使用它。我只照你说的发布'more out of interest':-

$_GET['unique'] = "blahblahblah=this_is_what_im_interested_in";

list(, $second) = explode('=', $_GET['unique']);

var_dump($second);

输出:-

string 'this_is_what_im_interested_in' (length=29)

您可以在手册页list()的第一组示例中看到很好的示例来说明灵活性。

我认为值得指出的是,尽管您的示例可行:-

$common->resetPasswordReply(explode('=', $_GET['unique'])[1]);

它确实会混淆您的代码,并且您传递给函数的内容并不明显。而类似以下的内容更具可读性:-

list(, $replyText) = explode('=', $_GET['unique']);
$common->resetPasswordReply($replyText));

考虑在 6 个月后回到你的代码并尝试调试它。使其尽可能自我记录。另外,不要忘记,当您在这里接受用户输入时,需要在某个时候对其进行清理。

于 2013-06-12T06:13:49.803 回答