10

私は次のような関数を持っています:

require("config.php");

function displayGta()
{
    (... lots of code...)

    $car = $car_park[3]; 
} 

そして次のようなconfig.php:

<?php
$car_park = array ("Mercedes 540 K.", "Chevrolet Coupe.", "Chrysler Imperial.", "Ford Model T.", "Hudson Super.", "Packard Sedan.", "Pontiac Landau.", "Duryea."); 
 (...)
?>

通知が表示されるのはなぜですか:未定義の変数:car_park

4

4 に答える 4

19

追加してみてください

 global $car_park;

あなたの関数で。$ car_parkの定義を含めると、グローバル変数が作成されます。関数内からそれにアクセスするには、グローバルとして宣言するか、$GLOBALSスーパーグローバルを介してアクセスする必要があります。

詳細については、可変スコープのマニュアルページを参照してください。

于 2010-06-28T21:49:07.263 に答える
10

パウロは何が起こっているのかを説明していますが、もう一度説明しようと思います。

変数を作成すると、それは特定のスコープに属します。スコープは、変数を使用できる領域です。

たとえば、私がこれを行うとしたら

$some_var = 1;

function some_fun()
{
   echo $some_var;
}

変数は関数内で作成されていないため、関数内では許可されていません。関数内で機能するには、以下の例が機能するように、globalキーワードを使用する必要があります

$some_var = 1;

function some_fun()
{
   global $some_var; //Call the variable into the function scope!
   echo $some_var;
}

これはその逆なので、次のことはできません

function init()
{
   $some_var = true;
}

init();

if($some_var) // this is not defined.
{

}

これを回避する方法はいくつかありますが、最も簡単な方法は、$GLOBALS特殊な変数であるため、スクリプト内のどこでも許可される配列を使用することです。

それで

$GLOBALS['config'] = array(
   'Some Car' => 22
);

function do_something()
{
   echo $GLOBALS['config']['some Car']; //works
}

また、セキュリティのために、サーバーのINIでグローバル登録がオフになっていることを確認してください。 http://www.php.net/manual/en/security.globals.php

于 2010-06-28T21:57:48.627 に答える
1

次のように、関数にプロキシすることを試みることができます。

関数foo($ bar){

(コード)

$ car = $ bar [3];

(コード)

}

それからあなたがそれを呼ぶとき:

echo foo($ bar);

于 2010-06-28T22:58:54.467 に答える
0

私は同じ問題を抱えていて、髪の毛を引き裂いてきました-何も機能せず、まったく何もありません-必死になって内容を新しいファイルにコピーし、(内容をまったく変更せずに)変更config.phpとして保存するまでtoとそれconfig2.phpはちょうど働き始めました。require_once('config.php');require_once('config2.php');

于 2019-12-03T18:17:49.173 に答える