PHP变量函数和语言构造


PHP Variable Functions and language constructs

我试图理解为什么PHP文档中的变量函数声明:

变量函数不适用于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);

则返回CCD_ 4。

我这里缺什么了吗?只是补充一下——我使用的是PHP 5.5.14。

您实际上并没有将任何语言构造用作变量函数:

但试试

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

它不会起作用,正如文档中所描述的那样

如手册中所述,在echo周围使用包装函数,然后可以将该函数用作可变函数

function myecho($value) {
    echo $value;
}
$function = 'myecho'; 
$function('Hello World');

它们意味着另一种用法:

<?php
$var = "some variable";
$a = "unset"; //also print, isset, echo, include
// you cannot do this:
$a($var);

当然,您可以取消设置或打印带有包含函数名的字符串的变量。。。

(或者我遗漏了什么?:)