2009-02-04 11 views
7

Estoy construyendo una página XML dentro de una función, y por alguna extraña razón no logro que todo salga de la función. He intentadoDevolviendo una variable de una función en php (return no funciona)

return $thisXml; 
} 
echo $thisXML; 

y solo me dan la declaración XML que está en la variable antes de la función. Si pongo un eco en la función, recupero todo como debería.

mi página se ve esencialmente como esto

$thisXml = 'xml declaration stuff'; 

function getThisXML($thisXML){ 
    for(i=1; i<5; i++){ 
    $query "has the 5 in it"; 

    while ($mysqlQuery =mysql_fetch_array($theQuery) { 
    $thisXml.='add the xml'; 
    } 
    $thisXml.='close the last element'; 
    return $thisXml; 
} 

echo $thisXml; 

como ya he dicho, si puedo reemplazar el 'retorno' con 'eco', me sale todo el buen XML. si hago eco fuera de la función, solo obtengo la declaración original.

realmente extraño, y he estado luchando con esto todo el día.

Respuesta

10
return $thisXml; 
} 
echo $thisXML; 

$ thisXML; solo existe en el alcance de la función. O bien, haga $ thisXML; global (mala idea) o echo getThisXML() donde getThisXML es la función que devuelve $thisXML;

+0

gracias, estás en lo correcto, necesito hacer eco de la función, no sólo de la variable (no fui a la ruta global, que estaba tratando para evitar eso). Gracias – pedalpete

1

Está intentando usar una variable definida dentro del alcance de la función.

Uso:

$thisXML; 

function do(){ 
global $thisXML; 
$thisXML = "foobar"; 
} 

print $thisXML; 
6

¿En realidad se llama a la función en el sentido de:

$ thisXml = getThisXML ($ someinput);

Quizás una pregunta tonta, pero no la veo en su descripción.

2

Tienes que llamar a la función y aplicar echo en el valor devuelto:

$thisXml = '…'; 
echo getThisXML($thisXml); 

O se pasa la variable por reference.

1

Devolver una variable no significa que afecte a esa variable globalmente, significa que la llamada a la función evalúa ese valor donde se usa.

$my_var = 5; 

function my_func() { 
    $my_var = 10; 
    return $my_var; 
} 

print my_func(); 
print "\n"; 
print $my_var; 

Esto imprimirá

10 
5 
2

Es necesario invocar la función!

$thisXml = 'xml declaration stuff'; 

echo getThisXML($thisXML); 

O pasar la variable por referencia:

$thisXml = 'xml declaration stuff'; 

function getThisXML(&$thisXML){ 
    ... 
    return $thisXml; 
} 

getThisXML($thisXML); 
echo $thisXml; 
+0

sí, estaba llamando a la función, olvidé poner eso en el código que ingresé arriba, lo siento. mi error. – pedalpete

Cuestiones relacionadas