2

言語は、Apache2.2サーバー上のPHP5.4です。これはajaxによって呼び出されるスクリプトです。

$usr = new User();

function getMyName(){
    echo $usr->username;
}
getMyName();

何らかの理由で$nameは範囲外です。なぜそうなるのでしょうか?また、スクリプトを直接呼び出してみたところ、同じ結果になりました。use($ name)を解決しようとしましたが、それは明らかに無名関数(クロージャ)でのみ機能しますか?

私がこれを行うとき、それは機能しますが、それはばかげています:

$usr = new User();
$name = $usr->username;

function getMyName($n){
    echo $n;
}
getMyName($name);
4

2 に答える 2

4
$usr = new User();

function getMyName(){
    global $usr;
    echo $usr->username;
}
getMyName();

または:

$usr = new User();

function getMyName($usr){
    echo $usr->username;
}
getMyName($usr);
于 2012-08-29T11:00:38.053 に答える
1

それはばかげていません。これは、可変スコープが機能することになっている方法です。$ usr変数を関数パラメーターとして渡す必要があります。そうしないと、スコープ外になります。関数は、入力を受け取り、結果/出力を送り返すように設計されています。グローバルをいじくり回すのではなく、2番目の例に固執する必要があります...

$usr = new User();
$name = $usr->username;

function getMyName($n){
    echo $n;
}
getMyName($name);

ウィキペディアからの引用は次のとおりです。

コンピュータサイエンスでは、サブルーチンは、プロシージャ、関数、ルーチン、メソッド、またはサブプログラムとも呼ばれ、特定のタスクを実行し、残りのコードから比較的独立している、より大きなコンピュータプログラム内のソースコードの一部です。

于 2012-08-29T11:05:27.067 に答える