2010-05-12 5 views
5

Je suis nouveau à PHP et apprenais des fonctions PHP de w3schools. Il a dit: « PHP permet un appel de fonction à effectuer lorsque le nom de la fonction est dans une variable »Pourquoi ce programme PHP ne fonctionne pas?

Ce programme a

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

Mais ce programme ne fonctionne pas:

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

Mais si Je fais echo('foo'); cela fonctionne.

Qu'est-ce que je fais mal?

+1

Je pense que votre message se est foiré. Il n'y a rien après que "ce programme a fonctionné" –

+1

ce qui a fonctionné et n'a pas fonctionné? – Shiki

Répondre

15

Cette caractéristique de PHP est appelée Fonctions variables.

La question ici est avec echo qui est pas vraiment une fonction mais une construction de langage et les fonctions variables peuvent ne être utilisés avec des fonctions. Dans votre premier exemple var_dump était une fonction et cela a bien fonctionné.

De doc PHP pour Variable functions:

fonctions variables ne sera pas travail avec construit le langage tels que l'écho(), impression(), unset(), isset(), vide() , include(), require() et similaires. Utiliser les fonctions wrapper pour utiliser l'une de ces constructions comme des fonctions variables.

Vous pouvez utiliser printf fonction à la place de echo comme:

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

ou vous pouvez écrire une fonction wrapper pour echo comme:

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

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

@Shiki: 'print()' ne fonctionnerait pas non plus.Vous pouvez utiliser 'printf()'. – codaddict

+0

vous avez raison. oops – Shiki

+0

Aussi, si vous avez vraiment besoin de faire cela (ne peut pas penser à une situation dans laquelle vous le feriez), vous pouvez envelopper l'écho dans une fonction fonction echoIt ($ string) { echo $ string; } $ v = 'echoIt'; $ v ('foo'); – David

1

echo est pas fonction! Vous pouvez utiliser printf qui est une fonction et il peut être utilisé pour imprimer quelque chose.

+0

Pas besoin de crier! Bien que je sois d'accord, le fait n'est pas évident et la conception du langage est mauvaise. – erisco

0

Il y a deux questions possibles, et vous devez les traiter à la fois:

  1. Cette fonctionnalité ne fonctionne que dans PHP 5.3, au mieux de mes souvenirs. C'est la version majeure la plus récente, vous devriez donc vous assurer que vous l'utilisez. Il est très probable que vous ne l'êtes pas.
  2. echo n'est pas une fonction, mais plutôt une construction de langage PHP. Vous aurez besoin d'écrire une fonction wrapper echoes qui lui a été transmise.
+0

Les fonctions variables ont été introduites bien avant PHP 5.3. Je ne connais pas le numéro de version exact. – erisco

0

Cela fonctionne:

$v = "printf"; 
$v('foo'); 
Questions connexes