2009-02-04 12 views
7

Buduję stronę XML wewnątrz funkcji i z jakiegoś dziwnego powodu nie wydaję całej tej funkcji z funkcji. Próbowałem już wykonać próbkę i uzyskać tylko deklarację xml, która jest w zmiennej przed funkcją. Jeśli umieściłem echo w funkcji, wszystko odzyskałem tak, jak powinienem.Zwracanie zmiennej z funkcji w php (return nie działa)

moja strona w zasadzie wygląda to

$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; 

jak powiedziałem, jeśli zastąpić „powrót” z „echo”, otrzymuję cały piękny xml. jeśli odbieram echo poza funkcją, otrzymuję tylko oryginalną deklarację.

Naprawdę dziwne, i zmagałem się z tym cały dzień.

Odpowiedz

10
return $thisXml; 
} 
echo $thisXML; 

$ thisXML; istnieje tylko w zakresie funkcji. Zrób $ thisXML; global (zły pomysł) lub echo getThisXML() gdzie getThisXML to funkcja, która zwraca $thisXML;

+0

dzięki, masz rację, muszę echo funkcji, nie tylko zmienna (nie iść globalnej trasy, starałem aby tego uniknąć). Dzięki – pedalpete

1

Próbujesz użyć zmiennej zdefiniowanej w zakresie funkcji.

Zastosowanie:

$thisXML; 

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

print $thisXML; 
6

Czy rzeczywiście wywołanie funkcji w sensie:

$ thisXml = getThisXML ($ someinput);

Może głupie pytanie, ale nie widzę tego w twoim opisie.

2

Trzeba wywołać funkcję i zastosowanie echo na zwracanej wartości:

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

Albo przekazać zmiennie przez reference.

1

Zwrócenie zmiennej nie oznacza, że ​​wpływa ona na tę zmienną globalnie, oznacza to, że wywołanie funkcji zwraca wartość, która jest używana.

$my_var = 5; 

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

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

To wydrukować

10 
5 
2

Trzeba wywołać funkcję!

$thisXml = 'xml declaration stuff'; 

echo getThisXML($thisXML); 

albo przekazać zmienną przez odniesienie:

$thisXml = 'xml declaration stuff'; 

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

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

tak, zadzwoniłem do funkcji, zapomniałem umieścić to w powyższym kodzie, przepraszam. mój błąd. – pedalpete

Powiązane problemy