2010-05-12 23 views
5

Sono nuovo di PHP e stavo imparando le funzioni PHP da w3schools. Ha detto "PHP permette una chiamata di funzione da effettuare quando il nome della funzione è in una variabile"Perché questo programma PHP non funziona?

Questo programma ha lavorato

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

Ma questo programma non ha funzionato:

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

Ma se Lo faccio echo('foo'); funziona.

Cosa sto sbagliando?

+1

penso che il tuo post ha ottenuto incasinato. Non c'è niente dopo "questo programma ha funzionato" –

+1

che cosa ha funzionato e non ha funzionato? – Shiki

risposta

15

Questa caratteristica del PHP si chiama funzioni variabili.

Il problema qui è con echo che non realtà una funzione ma un costrutto del linguaggio e funzioni variabili possono solo essere utilizzati con funzioni. Nel tuo primo esempio, var_dump era una funzione e funzionava correttamente.

Da PHP doc per Variable functions:

funzioni variabili non sarà lavoro con costrutti linguistici come echo(), stampa(), unset(), isset(), vuoto() , include(), require() e simili. Utilizzare le funzioni wrapper per utilizzare qualsiasi di questi costrutti come funzioni variabili.

Si può fare uso di printf funzione al posto di echo come:

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

oppure si può scrivere una funzione involucro per echo come:

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

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

@Shiki: 'print()' non funzionerebbe.Puoi usare 'printf()'. – codaddict

+0

hai ragione. oops – Shiki

+0

Inoltre, se si ha davvero bisogno di farlo (non si può pensare a una situazione in cui si vorrebbe) si può avvolgere l'eco in una funzione function echoIt ($ string) { echo $ string; } $ v = 'echoIt'; $ v ('pippo'); – David

1

echo non è un funzione! È possibile utilizzare printf che è una funzione e può essere utilizzato per stampare qualcosa.

+0

Non c'è bisogno di urlare! Sebbene io sia d'accordo, il fatto è un design linguistico non ovvio e scadente. – erisco

0

ci sono due problemi possibili, e si dovrebbe affrontare entrambi:

  1. quella caratteristica funziona solo in PHP 5.3, al meglio della mia memoria. Questa è la versione più recente, quindi dovresti assicurarti di usarla. È molto probabile che tu non lo sia.
  2. echo non è una funzione, ma piuttosto un costrutto di linguaggio PHP. Avrai bisogno di scrivere una funzione wrapper che sia stata passata a echoes.
+0

Le funzioni variabili sono state introdotte molto prima di PHP 5.3. Comunque non conosco il numero esatto della versione. – erisco

0

Questo funziona:

$v = "printf"; 
$v('foo'); 
Problemi correlati