Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于解引用函数结果的PHP语法_Php_Arrays_Syntax_Function - Fatal编程技术网

用于解引用函数结果的PHP语法

用于解引用函数结果的PHP语法,php,arrays,syntax,function,Php,Arrays,Syntax,Function,背景 在我经常使用的其他编程语言中,对函数的返回值进行操作很简单,无需声明新变量来保存函数结果 然而,在PHP中,这似乎并不是那么简单: 示例1(函数结果为数组) 示例2(函数结果是一个对象) PHP无法从函数访问数组结果。有些人把这称为一个问题,有些人只是接受这是语言的设计方式。因此,PHP让您创建不重要的变量只是为了提取所需的数据 所以你需要这样做 $var = foobar(); print($var[0]); PHP无法从函数访问数组结果。有些人把这称为一个问题,有些人只是接受这是

背景

在我经常使用的其他编程语言中,对函数的返回值进行操作很简单,无需声明新变量来保存函数结果

然而,在PHP中,这似乎并不是那么简单:

示例1(函数结果为数组)

示例2(函数结果是一个对象)
PHP无法从函数访问数组结果。有些人把这称为一个问题,有些人只是接受这是语言的设计方式。因此,PHP让您创建不重要的变量只是为了提取所需的数据

所以你需要这样做

$var = foobar();
print($var[0]);

PHP无法从函数访问数组结果。有些人把这称为一个问题,有些人只是接受这是语言的设计方式。因此,PHP让您创建不重要的变量只是为了提取所需的数据

所以你需要这样做

$var = foobar();
print($var[0]);

那么,根据具体情况,您可以使用以下任一解决方案:

function foo() {
    return array("foo","bar","foobar","barfoo","tofu");
}
echo(array_shift(foo())); // prints "foo"
echo(array_pop(foo())); // prints "tofu"
或者可以使用list()从返回的数组中获取特定值:

编辑:我前面给出的每个()的示例代码都不正确。each()返回一个键值对。因此,使用foreach()可能更容易:


那么,根据具体情况,您可以使用以下任一解决方案:

function foo() {
    return array("foo","bar","foobar","barfoo","tofu");
}
echo(array_shift(foo())); // prints "foo"
echo(array_pop(foo())); // prints "tofu"
或者可以使用list()从返回的数组中获取特定值:

编辑:我前面给出的每个()的示例代码都不正确。each()返回一个键值对。因此,使用foreach()可能更容易:


编写一个包装函数来完成同样的任务。由于PHP易于类型转换,这可能是非常开放的:

function array_value ($array, $key) {
return $array[$key];
}

编写一个包装函数来完成同样的任务。由于PHP易于类型转换,这可能是非常开放的:

function array_value ($array, $key) {
return $array[$key];
}
这行吗

 return ($foo->getBarArray())[0];
否则,可以发布getBarArray()函数吗?从你目前发布的内容来看,我不明白为什么这样做行不通。

这行吗

 return ($foo->getBarArray())[0];

否则,可以发布getBarArray()函数吗?从您目前发布的内容来看,我不明白为什么这样做行不通。

不幸的是,没有一种方法可以做到这一点,尽管在大多数其他编程语言中都是这样

如果你真的想做一个单行程序,你可以做一个叫做a()的函数

$test = a(func(), 1); // second parameter is the key.
<?php
class Example {
    function getBarArray() {
        $array = new ArrayObject();
        $array[] = 'uno';
        $array->append('dos');
        $array->append('tres');
        return $array;
    }
}

$foo = new Example();
$value = $foo->getBarArray()->offsetGet(2);

但除此之外,PHP不支持func()[1]。

不幸的是,尽管在大多数其他编程语言中都支持func()[1]

如果你真的想做一个单行程序,你可以做一个叫做a()的函数

$test = a(func(), 1); // second parameter is the key.
<?php
class Example {
    function getBarArray() {
        $array = new ArrayObject();
        $array[] = 'uno';
        $array->append('dos');
        $array->append('tres');
        return $array;
    }
}

$foo = new Example();
$value = $foo->getBarArray()->offsetGet(2);

但除此之外,PHP中不支持func()[1]。

这太牵强了,但如果您确实需要将其放在一行中:


return index0( $foo->getBarArray() );

/* ... */

function index0( $some_array )
{
  return $some_array[0];
}


这太牵强了,但如果您确实需要将其放在一行中:


return index0( $foo->getBarArray() );

/* ... */

function index0( $some_array )
{
  return $some_array[0];
}


正如其他人所提到的,这是不可能的。PHP的语法不允许这样做。然而,我确实有一个建议从另一个方向攻击这个问题

如果你在控制<代码> GETBARARTALS/<代码>方法,并且可以访问PHP标准库(安装在许多PHP 5.2 .x主机上,默认情况下用PHP 5.3安装),你应该考虑返回<代码> <代码>,而不是本地PHP数组/集合。code>ArrayObject有一个

方法,可用于检索任何索引,因此您的代码可能类似于

$test = a(func(), 1); // second parameter is the key.
<?php
class Example {
    function getBarArray() {
        $array = new ArrayObject();
        $array[] = 'uno';
        $array->append('dos');
        $array->append('tres');
        return $array;
    }
}

$foo = new Example();
$value = $foo->getBarArray()->offsetGet(2);

正如其他人所提到的,这是不可能的。PHP的语法不允许这样做。然而,我确实有一个建议从另一个方向攻击这个问题

如果你在控制<代码> GETBARARTALS/<代码>方法,并且可以访问PHP标准库(安装在许多PHP 5.2 .x主机上,默认情况下用PHP 5.3安装),你应该考虑返回<代码> <代码>,而不是本地PHP数组/集合。code>ArrayObject有一个

方法,可用于检索任何索引,因此您的代码可能类似于

$test = a(func(), 1); // second parameter is the key.
<?php
class Example {
    function getBarArray() {
        $array = new ArrayObject();
        $array[] = 'uno';
        $array->append('dos');
        $array->append('tres');
        return $array;
    }
}

$foo = new Example();
$value = $foo->getBarArray()->offsetGet(2);

如果只想返回数组中的第一项,请使用current()函数

return current($foo->getBarArray());

如果只想返回数组中的第一项,请使用current()函数

return current($foo->getBarArray());

事实上,我已经编写了一个允许此类行为的库:


适用于一切:函数、方法。缓存,因此与PHP本身一样快:)

实际上,我已经编写了一个库,允许这种行为:


适用于一切:函数、方法。缓存,因此与PHP本身一样快:)

经过进一步研究,我相信答案是否定的,像这样的临时变量确实是处理函数返回的数组的标准方法

return current($foo->getBarArray());
看起来这将从PHP5.4开始改变

此外,这个答案最初是针对这个问题的:


经过进一步研究,我相信答案是否定的,像这样的临时变量确实是处理函数返回的数组的标准方法

return current($foo->getBarArray());
看起来这将从PHP5.4开始改变

此外,这个答案最初是针对这个问题的:


当然,您可以返回一个对象而不是数组,并通过以下方式访问它:

echo "This should be 2: " . test()->b ."\n";

但是我没有发现用数组实现这一点的可能性:(

当然,您可以返回一个对象而不是数组,并通过以下方式访问它:

echo "This should be 2: " . test()->b ."\n";

但我没有发现用数组执行此操作的可能性:(

如果只是美观,那么如果返回对象,对象表示法将起作用。就内存管理而言,如果进行了临时复制,则不会产生临时副本,只会更改引用。

如果只是美观,则如果返回对象,对象表示法将起作用。就内存管理而言,如果进行了临时复制,则只会进行更改参考中。

我通常的解决方法是使用这样的通用函数

 function e($a, $key, $def = null) { return isset($a[$key]) ? $a[$key] : $def; }
然后

  echo e(someFunc(), 'key');
另外,这还可以避免在不需要时出现“未定义索引”警告

至于
foo()[x]
不起作用的原因,ans
$array = $foo->getBarArray();
$first_item = $foo->getBarArray(0);
//  can php say "homer"?      
//  print zoobar()->fname;     //  homer <-- yup
function returnArray() {
  return array(1, 2, 3);
}
$tmp = returnArray();
$ssecondElement = $tmp[1];
function returnArray() {
  return array(1, 2, 3);
}
$secondElement = returnArray()[1];
echo [1, 2, 3][1];
echo 'PHP'[1];