-1

ドキュメントの先頭に値が設定されているPHP変数がありますが、WHILE LOOPを使用すると、定義が解除されて機能しなくなります。

誰かがこの値を割り当てたままにする方法を手伝ってもらえますか?

私が定義し続けようとしている変数は$langです

$lang = "en";// base url


function getAccountDeliveryDetails($id){
    $query  = "SELECT * FROM tbl_user_delivery WHERE user_id = '$id'";
    $result = mysql_query($query);

    while($row = mysql_fetch_array($result)){
    $phrase =   array(  
                            'de'    =>  'Bearbeiten',
                            'en'    =>  'Edit',
                            'es'    =>  'Editar',
                            'fr'    =>  'Éditer',
                            'it'    =>  'Modifica');
                        echo $phrase[$lang];
    }   
}
4

8 に答える 8

3

関数内ではグローバルを使用する必要があります。関数の最初の行

function getAccountDeliveryDetails($id){
    global $lang;

    $query  = "SELECT * FROM tbl_user_delivery WHERE user_id = '$id'";
    $result = mysql_query($query);

    while($row = mysql_fetch_array($result)){
    $phrase =   array(  
                            'de'    =>  'Bearbeiten',
                            'en'    =>  'Edit',
                            'es'    =>  'Editar',
                            'fr'    =>  'Éditer',
                            'it'    =>  'Modifica');
                        echo $phrase[$lang];
    }   
}
于 2012-11-28T10:18:37.413 に答える
3

$langの範囲外ですgetAccountDeliveryDetails()。JavaScript/Java/AS (あなたの出身かもしれません) とは異なり、関数の外側で定義された変数は、関数のスコープに自動的には現れません。

$lang独立/グローバルであると仮定するとglobal $lang;、変数をインポートするために関数の最初の行として呼び出すことができます。しかし、それは長期的には良い解決策ではありません。

于 2012-11-28T10:18:56.270 に答える
1

関数の外部変数にアクセスするためにグローバルを使用する

function getAccountDeliveryDetails($id){
global $lang;
$query  = "SELECT * FROM tbl_user_delivery WHERE user_id = '$id'";
$result = mysql_query($query);

while($row = mysql_fetch_array($result)){
$phrase =   array(  
                        'de'    =>  'Bearbeiten',
                        'en'    =>  'Edit',
                        'es'    =>  'Editar',
                        'fr'    =>  'Éditer',
                        'it'    =>  'Modifica');
                    echo $phrase[$lang];
 }   
}
于 2012-11-28T10:18:59.533 に答える
1

変数のスコープに関する記事をチェック

function getAccountDeliveryDetails($id){
   global $lang;
   ..
于 2012-11-28T10:19:18.047 に答える
0

あなたは宣言することができます

global $lang 

関数内。

しかし、それは間違いなく良いプログラミング手法ではありません。

PHP変数スコープのマニュアルエントリを参照してください

于 2012-11-28T10:22:02.357 に答える
0

これを行うには 4 つの方法があります。

グローバル

コードが機能するために既存のスーパーグローバルへの依存関係が作成されるため、可能であればこの方法には近づかないでください。

$lang = "en";// base url
function getAccountDeliveryDetails($id){
    global $lang; //extra vars can be added after a , eg global $a, $b, $c;
    ....
}

スーパーグローバル

グローバルと同じ問題ですが、これは既存のスーパーグローバルを使用し、使用する必要がないという点で一種の目に見えない依存関係を作成するため、さらに厄介global $varnameです。また、PHP コーダーは、カスタム変数を既存のスーパー グローバルに保存することを期待していません。

こんなことしないで

$_SERVER['my_vars']['lang'] = "eg";// base url
function getAccountDeliveryDetails($id){
    print $_SERVER['my_vars']['lang']; //ewwwww
    ....
}

関数パラメータ

これは、パラメータを渡す通常の最良の方法です。

$lang = "en";// base url
function getAccountDeliveryDetails($id, $lang){
    print $lang;
    ....
}

使用 (閉鎖)

既存の関数には実際には適用されません (ただし、クロージャーは引き続き関数と見なされます) が、ここではもう少し「完全な」答えになるようにします。それらをパラメーターとして渡すか、「use」キーワードを使用してローカル スコープから取り込むことができます。

$lang = "en";// base url
function ($id) use ($lang) {
    print $lang;
    ....
}

結論

パラメータオプションで行くことが可能です。常に DEFAULT 値を使用して、既存のコードを壊さないようにすることができます。

function getAccountDeliveryDetails($id, $lang = 'eg'){

    $query  = "SELECT * FROM tbl_user_delivery WHERE user_id = '$id'";
    $result = mysql_query($query);

    while($row = mysql_fetch_array($result)){
    $phrase =   array(  
                            'de'    =>  'Bearbeiten',
                            'en'    =>  'Edit',
                            'es'    =>  'Editar',
                            'fr'    =>  'Éditer',
                            'it'    =>  'Modifica');
                        echo $phrase[$lang];
    }   
}

したがって、この関数を次のように呼び出すことができ、$lang はデフォルトで "en" になります。

getAccountDeliveryDetails(23);
于 2012-11-28T10:41:48.970 に答える
0

グローバル変数にアクセスするために使用$GLOBALSするため、次の行を置き換えます。

echo $phrase[$lang];

これについて:

echo $phrase[$GLOBALS['lang']];
于 2012-11-28T10:19:08.787 に答える
0

関数global $lang;内に書き込む getAccountDeliveryDetails()

理由:

ユーザー定義関数内では、ローカル関数スコープが導入されています。関数内で使用される変数は、デフォルトでローカル関数スコープに制限されます。例えば:

$a = 1; /* global scope */ 


    function test()
    { 
        echo $a; /* reference to local scope variable */ 
    } 

    test();

echo ステートメントは $a 変数のローカル バージョンを参照し、このスコープ内の値が割り当てられていないため、このスクリプトは出力を生成しません。C のグローバル変数は、ローカル定義によって特にオーバーライドされない限り、関数で自動的に使用できるという点で、これは C 言語とは少し異なることに気付くかもしれません。これにより、ユーザーが誤ってグローバル変数を変更する可能性があるという問題が発生する可能性があります。PHP では、グローバル変数を関数内で使用する場合、グローバル変数を関数内で宣言する必要があります。

グローバルキーワード

まず、global の使用例:

例1 グローバルの使用

$a = 1;
$b = 2;

    function Sum()
    {
        global $a, $b;

        $b = $a + $b;
    } 

    Sum();

echo $b;

上記のスクリプトは 3 を出力します。関数内で$aand $bglobal を宣言することにより、いずれかの変数へのすべての参照はグローバル バージョンを参照します。関数で操作できるグローバル変数の数に制限はありません。

于 2012-11-28T10:49:01.577 に答える