About returning the value from a recursive function
If you are calling a recursive function then it would not return the value to the calling function unless you would declare the returning variable as global.
for example
<?php
function GetDestinationChild($id)
{
global $ar;
//do some operation
//if some results comes
if($cnt>0)
{
//call itself $this->GetDestinationChild($obj_2->dest_id);
}
else
{
//return computed value
return $ar;
}
}
?>
if you would not define the returning variable as global it would not return the desired computed value
返り値
オプションの return 文により値を返すことができます。 配列やオブジェクトを含むあらゆる型を返すことができます。 これにより、関数の実行を任意の箇所で終了し、その関数を呼び出した 箇所に制御を戻すことが出来ます。詳細に関しては return()を参照してください。
例1 return()の使用法
<?php
function square($num)
{
return $num * $num;
}
echo square(4); // '16'を出力
?>
複数の値を返すことはできませんが、リストを返すことにより 同じ効果を得ることができます。
例2 複数の値を得るために配列を返す
<?php
function small_numbers()
{
return array (0, 1, 2);
}
list ($zero, $one, $two) = small_numbers();
?>
関数からリファレンスを返すには、リファレンス演算子 & を関数宣 言部および変数への返り値を代入する際の両方で使用する必要があります。
例3 関数からリファレンスを返す
<?php
function &returns_reference()
{
return $someref;
}
$newref =& returns_reference();
?>
リファレンスに関するさらに詳しい情報がリファレンスの説明にあります。
返り値
sandeepkhokher at gmail dot com
23-Apr-2008 04:21
23-Apr-2008 04:21
bgalloway at citycarshare dot org
27-Mar-2008 07:27
27-Mar-2008 07:27
Be careful about using "do this thing or die()" logic in your return lines. It doesn't work as you'd expect:
<?php
function myfunc1() {
return('thingy' or die('otherthingy'));
}
function myfunc2() {
return 'thingy' or die('otherthingy');
}
function myfunc3() {
return('thingy') or die('otherthingy');
}
function myfunc4() {
return 'thingy' or 'otherthingy';
}
function myfunc5() {
$x = 'thingy' or 'otherthingy'; return $x;
}
echo myfunc1(). "\n". myfunc2(). "\n". myfunc3(). "\n". myfunc4(). "\n". myfunc5(). "\n";
?>
Only myfunc5() returns 'thingy' - the rest return 1.
webmaster at insightpcs dot net
24-Sep-2007 03:57
24-Sep-2007 03:57
mmamedov ::> pub [at] turkmenweb d0t c0m
im not sure if what you are doing is right...try this:
<?php
function isValid($vartocheck)
{
if($vartocheck == true)
{
return 1;
}
else
{
return 0;
}
}
?>
Then in your code:
<?php
$var = isValid($var1=$var2)
if($var == 0)
{
// Show Error
}
else if($var == 1)
{
// Show success
}
?>
Trevor Blackbird > yurab.com
18-Apr-2006 04:36
18-Apr-2006 04:36
You can also use the compact-extract pair to return multiple values:
<?php
function Composite($x, $y) {
$sum = $x + $y;
$dif = $x - $y;
return compact('sum', 'dif');
}
extract(Composite(3, 4));
echo $sum;
echo $dif;
?>
nick at itomic.com
04-Aug-2003 12:56
04-Aug-2003 12:56
Functions which return references, may return a NULL value. This is inconsistent with the fact that function parameters passed by reference can't be passed as NULL (or in fact anything which isnt a variable).
i.e.
<?php
function &testRet()
{
return NULL;
}
if (testRet() === NULL)
{
echo "NULL";
}
?>
parses fine and echoes NULL
rusty at socrates dot berkeley dot edu
17-Jul-2003 02:48
17-Jul-2003 02:48
Here's a sick idea. When a function returns no value, if you assign its return value to a variable that variable will be unset. So instead of returning -1 on error just return with no value.
For example,
function myfunc($myvar) {
if ($myvar == "abc")
return(1);
if ($myvar == "xyz")
return(2);
return;
}
$abc = myfunc("def");
if (isset($abc))
echo("a-ok");
else
echo("oops");
LouisGreen at pljg dot freeserve dot co dot uk
25-Mar-2003 10:13
25-Mar-2003 10:13
It seems that when you wish to export a varible, you can do it as return $varible, return an array(), or globalise it. If you return something, information for that varible can only travel one way when the script is running, and that is out of the function.
function fn() {
$varible = "something";
return $varible;
}
echo fn();
OR
$newvarible = fn();
Although if global was used, it creates a pointer to a varible, whether it existed or not, and makes whatever is created in the function linked to that global pointer. So if the pointer was global $varible, and then you set a value to $varible, it would then be accessible in the global scope. But then what if you later on in the script redefine that global to equal something else. This means that whatever is put into the global array, the information that is set in the pointer, can be set at any point (overiden). Here is an example that might make this a little clearer:
function fn1() {
global $varible; // Pointer to the global array
$varible = "something";
}
fn1();
echo $varible; // Prints something
$varible = "12345";
echo $varible; // Prints 12345
function fn2() {
global $varible; // Pointer to the global array
echo $varible;
}
fn2(); // echos $varible which contains "12345"
Basically with the global array, you can set it refer to something already defined or set it to something, (a pointer) such as varible you plan to create in the function, and later possibly over ride the pointer with something else.
ian at NO_SPAM dot verteron dot net
15-Jan-2003 04:28
15-Jan-2003 04:28
In reference to the poster above, an additional (better?) way to return multiple values from a function is to use list(). For example:
function fn($a, $b)
{
# complex stuff
return array(
$a * $b,
$a + $b,
);
}
list($product, $sum) = fn(3, 4);
echo $product; # prints 12
echo $sum; # prints 7
devinemke at yahoo dot com
26-Jun-2002 11:45
26-Jun-2002 11:45
A function can only return one value, but that value can be an array or other compound value. If you want to just define several variables into the global scope within your function you can do two things:
1. return an array from your function and then run the extract() function
$result_array = test ();
extract ($result_array);
2. Or you can just append the variables to the $GLOBALS array:
$array = array ('first' => 'john', 'middle' => 'q', 'last' => 'public');
function upper_case () {
global $array;
foreach ($array as $key => $value)
{
$GLOBALS[$key] = strtoupper ($value);
}
}
upper_case ();
echo "$first $middle $last";
// returns JOHN Q PUBLIC
In this second example you can create multiple values without necessarily returning anything from the function. This may be handy for applying several functions (stripslashes, trim, etc..) accross all elements of $_POST or $_GET and then having all of the newly cleaned up variables extracted out for you.
destes at ix dot netcom dot com dot nospam
03-Mar-2002 12:35
03-Mar-2002 12:35
One thing to note about returning arrays- the usual "complex variable" syntax will give you a parse error. For instance, if you have:
function adminstuff() {
mysql_connect('localhost', 'user', 'pass');
mysql_select_db('mydb');
$result = mysql_query('SELECT login, pass FROM users);
$resultrow = mysql_fetch_array( $result );
# this next line is key:
return array ({$resultrow['login']}, {$resultrow['pass']});
}
That won't work. You *can* reference array elements without the curly-braces syntax, i.e.:
return array ($resultrow['login'], $resultrow['pass']);
But you'll get a parse error if you try to use curly braces. Thanks,
Steve
php at control-escape dot com
25-Apr-2001 12:26
25-Apr-2001 12:26
PHP functions that do not explicitly return a value will be 'void', that is, they return 'null'. C programmers will be accustomed to this already, but folks coming from Perl may expect the return value of a function to be the return value of the last expression evaluated inside the function, as is the case with Perl. Not so.
