2010-05-12 18 views
5

Jestem nowy dla PHP i uczyłem się o funkcjach PHP od w3schools. Mówi się „PHP umożliwia wywołanie funkcji mają być wykonane, gdy nazwa funkcji jest w zmiennej”Dlaczego ten program PHP nie działa?

Ten program pracował

<?php 
$v = "var_dump"; 
$v('foo'); 
?> 

Ale ten program nie działa:

<?php 
$v = "echo"; 
$v('foo'); 
?> 

ale jeśli Robię echo('foo'); to działa.

Co robię źle?

+1

myślę Twój post został pomieszane. Nie ma nic po "zadziałał ten program" –

+1

co działało i nie działało? – Shiki

Odpowiedz

15

Ta cecha PHP nazywa Zmienne funkcje.

Chodzi tu o echo która nie naprawdę funkcją ale konstrukt język i funkcje zmiennych mogą tylko być używany z funkcji. W twoim pierwszym przykładzie var_dump była funkcją i działała dobrze.

Od PHP doc dla Variable functions:

Zmienne funkcje nie będzie praca z języku konstruuje takich jak echo(), print(), unset() isset(), empty() , include(), require() i podobne. Wykorzystaj funkcje opakowania, aby użyć dowolnej z tych konstrukcji jako funkcji zmiennych.

Można skorzystać z printf funkcji w miejsce echo jak:

$e = "printf"; // printf is a function not a language construct. 
$e('foo'); 

lub można napisać funkcję otoki dla echo jak:

$e = "echo_wrapper"; 
$e('foo'); 

function echo_wrapper($input) { // wrapper function that uses echo. 
     echo $input; 
} 
+0

@Shiki: 'print()' również nie działa.Możesz użyć 'printf()'. – codaddict

+0

masz rację. oops – Shiki

+0

Ponadto, jeśli naprawdę musisz to zrobić (nie możesz wymyślić sytuacji, w której byś chciał), możesz zawinąć echo w funkcję: function echoIt ($ string) { echo $ string; } $ v = 'echoIt'; $ v ("foo"); – David

1

echo nie jest funkcjonować! Możesz użyć printf, która jest funkcją i może być użyta do wydrukowania czegoś.

+0

Nie trzeba krzyczeć! Chociaż zgadzam się, faktem jest nieoczywisty i słaby projekt językowy. – erisco

0

Istnieją dwa możliwe problemy i należy je zarówno adres:

  1. ta funkcja działa tylko w PHP 5.3, do mojej najlepszej skupienia. To jest najnowsza główna wersja, więc powinieneś upewnić się, że jej używasz. Jest bardzo prawdopodobne, że nie jesteś.
  2. echo nie jest funkcją, ale konstruktem języka PHP. Musisz napisać funkcję opakowania, która została mu przekazana.
+0

Funkcje zmienne zostały wprowadzone na długo przed PHP 5.3. Nie znam dokładnego numeru wersji. – erisco

Powiązane problemy