在PHP中将变量传递给其父函数?

Bro*_*iLD 1 php variables function return-value

我在函数中有一个函数,我需要内部函数使它的变量在父函数的范围内可用,例如:

function sayMyName(){
    getName(); // inner function generates $name value

    echo $name; // use $name
}

sayMyName();
Run Code Online (Sandbox Code Playgroud)

我可以很容易地将两个函数中的东西全局化......但是我的情况要复杂得多,处理更多变量并且每个变量全局化都有点乏味.

谢谢.

PS我注意到很多"回归"建议.对不起,我不清楚,我需要返回更多的变量..不是一个简单的回报.多谢你们

Bli*_*itZ 8

你可以使用$_GLOBALS,但这是"不好的做法".所以,


1:使用return:

<?php
function getName(){
    $name = 'Smith';

    return $name;
}

function sayMyName(){
    $name = getName();

    echo $name;
}

sayMyName();
?>
Run Code Online (Sandbox Code Playgroud)

显示:

Smith
Run Code Online (Sandbox Code Playgroud)

2:使用references:

<?php
function getName(&$name){
    $name = 'Smith';
}

function sayMyName(){
    getName($name);

    echo $name;
}

sayMyName();
?>
Run Code Online (Sandbox Code Playgroud)

显示:

Smith
Run Code Online (Sandbox Code Playgroud)

3:返回array多个变量:

<?php
function getName(){
    $surname = 'Smith';
    $name    = 'John';

    return array($surname, $name);
}

function sayMyName(){
    list($surname, $name) = getName();

    echo $name, ' ', $surname;
}

sayMyName();
?>
Run Code Online (Sandbox Code Playgroud)

显示:

John Smith
Run Code Online (Sandbox Code Playgroud)

4.返回object多个变量的自定义:

<?php
function getName(){
    $surname = 'Smith';
    $name    = 'John';

    $buffer = new stdClass();

    $buffer->name    = $name;
    $buffer->surname = $surname;

    return $buffer;
}

function sayMyName(){
    $obj = getName();

    echo $obj->name, ' ', $obj->surname;
}

sayMyName();
?>
Run Code Online (Sandbox Code Playgroud)

显示:

John Smith
Run Code Online (Sandbox Code Playgroud)

5.使用anonymous functionuse语句和references:

<?php
function sayMyName(){
    $surname = $name = 'Unknown';

    $temp = function() use (&$name, &$surname){
        $surname = 'Smith';
        $name    = 'John';
    };

    $temp();

    echo $name, ' ', $surname;
}

sayMyName();
?>
Run Code Online (Sandbox Code Playgroud)

显示:

John Smith
Run Code Online (Sandbox Code Playgroud)