1

関数内に関数があり、その変数を親関数のスコープで使用できるようにするには、内部関数が必要です。たとえば、次のようになります。

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

    echo $name; // use $name
}

sayMyName();

両方の関数で物事を簡単にグローバル化できます...しかし、私の状況ははるかに複雑で、より多くの変数を処理し、それぞれをグローバル化するのは少し面倒です。

ありがとう。

PS私は多くの「返品」の提案に気づきました。申し訳ありませんが、明確ではありませんでした。単純なリターンではなく、より多くの変数を返す必要があります。みんなありがとう

4

9 に答える 9

3

これを行う

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

    echo $name; // results will be returned
}

sayMyName();

あなたの内部関数がこのような名前を返すことを願っています

function getName(){
    return $name;
}

その後、それは動作します

于 2013-04-17T07:42:55.363 に答える
3

これが、オブジェクト指向プログラミングが設計された目的です。多くの関数が変数を共有する必要がある場合は、次のようにクラスにカプセル化するのがおそらく最善です。

class WhateverDescibestYourViewOfTheWorld {
    protected $name;

    function __construct( $name)
    {
        $this->name = $name;
    }

    function GetName() {
        return $this->name;
    }

    function SayName()
    {
        echo $this->name;
    }
}

// And use it:
$o = new WhateverDescibestYourViewOfTheWorld();
...
$o->SayName();

または、データ コンテナーとしてのみ使用されるクラスを構築することもできます。

class DataContainer {
    public $name;
    public $address;
    // ...
}

// By reference this will modify object previously created
function GetProperties( &$dataContainer) // Note that & isn't necessary since PHP5
{
    $dataContainer->name = "...";
}

$c = new DataContainer();
GetProperties($c);

または、これを単純化して配列を使用できます。

function GetProperties( array &$dataContainer)
{
     $dataContainer['name'] = '...';
}

$data = array();
GetProperties($data);
于 2013-04-17T07:48:22.933 に答える
0

以下のようにすることもできます。

$name = "";

function sayMyName(){
    getName(); // inner function generates $name value
    //set $name variable inside getName() function.
    echo $name; // results to undefined
}

sayMyName();
于 2013-04-17T07:45:27.130 に答える
0

以下のコードを使用してください、それはあなたの問題を解決します

global $var;

PHPスパン内のどこでも使用できます。

于 2013-04-17T07:46:33.747 に答える