2014-10-07 57 views
1

我试图理解为什么PHP documentation for variable functions指出:PHP变量函数和语言结构

变量函数不能用于语言结构,例如echo, 打印,取消设置(),isset()函数的工作,空(),包含,要求等等。 利用包装函数将这些结构中的任何一个用作 变量函数。

我尝试了一些这些,他们的工作只是罚款:

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。

+0

你预计会发生什么? – 2014-10-07 09:44:05

+1

尝试'$ function ='echo'; $ function('Hello World');' – 2014-10-07 09:47:16

+0

我想我明白了 - 本来我认为你将无法将这些结构与变量函数结合使用,但我相信它们只是指你不能声明变量的事实例如'echo'($ echoVariable ='echo'),并将其作为函数调用:$ echoVariable()。 – 2014-10-07 09:47:38

回答

2

您实际上并未将任何语言结构用作可变函数:

但尝试

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

而且它不会工作,正如在文档中描述

使用的包装功能手册中描述前后呼应,然后你可以使用该功能作为变量函数

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

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

感谢马克 - 奇怪有时你的大脑如何冻结:) – 2014-10-07 09:50:54

+0

脑冻结可以发生在任何人身上 – 2014-10-07 09:51:57

2

他们说的是另一种用法:

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

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

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

(还是我失去了一些东西:)?)

+0

这正是我发布这张票后我想到的一分钟:)感谢迈克。 – 2014-10-07 09:48:50