2014-10-07 74 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