Reputation: 21566
I'm building an XML page inside of a function, and for some strange reason I don't get the whole thing spit out of the function. I've tried
return $thisXml;
}
echo $thisXML;
and I only get the xml declaration which is in the variable before the function. If i put an echo in the function, i get everything back as I should.
my page essentially looks like this
$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;
as i said, if I replace the 'return' with 'echo', I get all the nice xml. if I echo outside the function, I only get the original declaration.
really strange, and i've been struggling with this one all day.
Upvotes: 8
Views: 47476
Reputation: 1
You can create function in php this way:
<?php
$name = array("ghp", "hamid", "amin", "Linux");
function find()
{
$find = 0;
if(in_array('hamid', $name))
{
$find = 1;
return $find;
}
else
{
return $find;
}
}
//###################
$answare = find();
echo $answare;
?>
Upvotes: 0
Reputation: 91792
Are you actually calling the function in the sense of:
$thisXml = getThisXML($someinput);
Maybe a silly question, but I don´t see it in your description.
Upvotes: 7
Reputation: 5348
You need to invoke the function!
$thisXml = 'xml declaration stuff';
echo getThisXML($thisXML);
Or pass the variable by reference:
$thisXml = 'xml declaration stuff';
function getThisXML(&$thisXML){
...
return $thisXml;
}
getThisXML($thisXML);
echo $thisXml;
Upvotes: 4
Reputation: 129746
Returning a variable doesn't mean that it affects that variable globally, it means the function call evaluates to that value where it's used.
$my_var = 5;
function my_func() {
$my_var = 10;
return $my_var;
}
print my_func();
print "\n";
print $my_var;
This will print
10
5
Upvotes: 1
Reputation: 655775
You have to call the function and apply echo
on the returned value:
$thisXml = '…';
echo getThisXML($thisXml);
Or you pass the variably by reference.
Upvotes: 2
Reputation: 604
You are trying to use a variable defined inside the function scope.
Use:
$thisXML;
function do(){
global $thisXML;
$thisXML = "foobar";
}
print $thisXML;
Upvotes: 1
Reputation: 17554
return $thisXml;
}
echo $thisXML;
$thisXML; only exists in the scope of the function.
Either make $thisXML; global (bad idea) or echo getThisXML()
where getThisXML is the function that returns $thisXML
;
Upvotes: 12