2010-05-12 24 views
5

Soy nuevo en PHP y estaba aprendiendo acerca de las funciones PHP de w3schools. Se dijo "PHP permite una llamada de función que se realiza cuando el nombre de la función se encuentra en una variable"¿Por qué este programa PHP no funciona?

Este programa funcionó

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

Pero este programa no funcionó:

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

Pero si Hago echo('foo'); funciona.

¿Qué estoy haciendo mal?

+1

creo que su puesto quedó en mal estado. No hay nada después de que "este programa funcionó" –

+1

¿Qué funcionó y qué no? – Shiki

Respuesta

15

Esta característica de PHP se llama Funciones variables.

El problema aquí es con echo que es no realmente una función, sino una construcción del lenguaje y funciones variables pueden sólo se pueden utilizar con funciones. En su primer ejemplo, var_dump era una función y funcionó bien.

Desde PHP doc para Variable functions:

Funciones variables voluntad no trabajo con lenguaje construye como eco(), print(), unset(), isset(), vacío() , include(), require() y similares. Utilice las funciones de contenedor para hacer uso de cualquiera de estos constructos como funciones variables.

Puede hacer uso de printf función en lugar de echo como:

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

o puede escribir una función envoltorio para echo como:

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

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

@Shiki: 'print()' tampoco funcionaría.Puede usar 'printf()'. – codaddict

+0

tienes razón. oops – Shiki

+0

Además, si realmente necesita hacer esto (no puede pensar en una situación en la que lo haría) puede envolver el eco en una función función echoIt ($ cadena) { echo $ string; } $ v = 'echoIt'; $ v ('foo'); – David

1

echo no es una ¡función! Puede usar printf que es una función y se puede usar para imprimir algo.

+0

¡No es necesario gritar! Aunque estoy de acuerdo, el hecho es que el diseño del lenguaje no es obvio y deficiente. – erisco

0

Hay dos posibles problemas, y usted debe hacer frente a los dos:

  1. esa característica sólo funciona en PHP 5.3, a lo mejor de mi recuerdo. Esa es la versión principal más nueva, por lo que debes asegurarte de que la estés usando. Es muy probable que no sea así.
  2. echo no es una función, sino una construcción de lenguaje PHP. Tendrá que escribir una función de contenedor que echoes le pasó.
+0

Las funciones de variables se introdujeron mucho antes de PHP 5.3. Aunque no sé el número exacto de la versión. – erisco

0

Esto funciona:

$v = "printf"; 
$v('foo'); 
Cuestiones relacionadas