pedalpete
pedalpete

Reputation: 21566

Returning a variable from a function in php (return not working)

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

Answers (7)

Hamid Ghp
Hamid Ghp

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

jeroen
jeroen

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

mati
mati

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

Jeremy Banks
Jeremy Banks

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

Gumbo
Gumbo

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

Jorge Niedbalski R.
Jorge Niedbalski R.

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

Steerpike
Steerpike

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

Related Questions