背景
在我经常使用的所有其他编程语言中,在不声明一个新变量来保存函数结果的情况下,对函数的返回值进行操作是很简单的。
然而,在PHP中,这似乎并不是那么简单:
example1 (函数结果是一个数组)
<?php
function foobar(){
return preg_split('/\s+/', 'zero one two three four five');
}
// can php say "zero"?
/// print( foobar()[0] ); /// <-- nope
/// print( &foobar()[0] ); /// <-- nope
/// print( &foobar()->[0] ); /// <-- nope
/// print( "${foobar()}[0]" ); /// <-- nope
?>example2 (函数结果是一个对象)
<?php
function zoobar(){
// NOTE: casting (object) Array() has other problems in PHP
// see e.g., http://stackoverflow.com/questions/1869812
$vout = (object) Array('0'=>'zero','fname'=>'homer','lname'=>'simpson',);
return $vout;
}
// can php say "zero"?
// print zoobar()->0; // <- nope (parse error)
// print zoobar()->{0}; // <- nope
// print zoobar()->{'0'}; // <- nope
// $vtemp = zoobar(); // does using a variable help?
// print $vtemp->{0}; // <- nope 发布于 2011-10-25 12:41:07
这是具体的数组取消引用,它目前在php5.3中是不支持的,但是在下一个版本5.4中应该是可能的。另一方面,在当前php版本中,对象取消引用是可能的。我也期待这个功能!
发布于 2009-04-13 01:14:59
PHP无法访问函数的数组结果。有些人称这是一个问题,有些人只是接受这种语言是如何设计的。因此,PHP让您创建不必要的变量来提取所需的数据。
所以你得这么做。
$var = foobar();
print($var[0]);发布于 2009-11-22 17:01:31
PHP5.4:数组删除是可能的
示例(来源):
function foo() {
return array(1, 2, 3);
}
echo foo()[2]; // prints 3使用PHP5.3,您将得到
Parse error: syntax error, unexpected '[', expecting ',' or ';' 原始答案:
这是一直 已询问 已经 在此之前。答案是否定的。这是不可能的。
关于此主题的报价 安迪·古特曼:
这是一个众所周知的特性请求,但在PHP5.0中不支持。我不能告诉你它是否会得到支持。这需要一些研究和很多思考。
您还可以在PHP中找到这个请求 一个数字 时代性。关于技术细节,我建议您查看官方RFC和/或询问PHP内部。
https://stackoverflow.com/questions/742764
复制相似问题