【问题标题】:PHP Variable Functions and language constructsPHP 变量函数和语言结构
【发布时间】:2014-10-07 09:41:35
【问题描述】:

我试图理解为什么PHP documentation for variable functions 声明:

变量函数不适用于 echo 等语言结构, print、unset()、isset()、empty()、include、require 等。 利用包装函数将这些构造中的任何一个用作 变量函数。

我尝试了其中一些,它们工作得很好:

function animal() {

    return 'Monkey';

}

$animal = 'animal';

echo $animal();

返回Monkey - 正如人们所期望的那样。

print 构造相同的结果 - 然后我尝试了unset(),它也工作得非常好:

function getIndex() {

    return 0;

}

$index = 'getIndex';

$array = array(

    'Monkey',
    'Gorilla'

);

unset($array[$index()]);

print_r($array);

这将返回Array ( [1] => Gorilla )

这里有什么我遗漏的吗?补充一下 - 我使用的是 PHP 5.5.14。

【问题讨论】:

  • 您预计会发生什么?
  • 试试$function = 'echo'; $function('Hello World');
  • 我想我明白了 - 最初我认为您将无法将这些构造与变量函数一起使用,但我相信它们只是指您无法使用 'echo 声明变量的事实' ( $echoVariable = 'echo' ) 例如并将其称为函数:$echoVariable()。
  • 谢谢马克——我就是这么想的。

标签: php function variables


【解决方案1】:

您实际上并没有使用任何语言结构作为变量函数:

但是试试

$function = 'echo'; 
$function('Hello World');

它不会工作,完全按照文档中的描述

按照手册中的说明在 echo 周围使用包装函数,然后您可以将该函数用作变量函数

function myecho($value) {
    echo $value;
}

$function = 'myecho'; 
$function('Hello World');

【讨论】:

  • 谢谢马克 - 奇怪的是你的大脑有时会冻结:)
【解决方案2】:

它们意味着另一种用法:

<?php
$var = "some variable";
$a = "unset"; //also print, isset, echo, include

// you cannot do this:
$a($var);

当然,您可以使用包含函数名称的字符串取消设置或打印变量...

(或者我错过了什么?:))

【讨论】:

  • 这正是我在张贴这张票后一分钟想到的 :) 谢谢 Mike。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-23
  • 1970-01-01
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多