ここで範囲の問題があります。なぜそれが機能しないのかわからないので、次のように設定しました:
関数.php
global $id;
$id = $_GET['id'];
index.php
require_once('functions.php');
echo $id;
functions.php 内で $id をエコーアウトできます。ただし、私の echo $id; index.php 内で空白が表示されます。何もない。
私は何を間違っていますか?
PHP では、このglobal
キーワードを使用すると、ローカル スコープ内からグローバル スコープ内の変数を参照できます。たとえば、関数内のグローバル変数にアクセスできます。global
とにかくグローバルスコープにいるので、例では必要ありません。
あなたが持っているものの簡略化されたバージョンを私たちに見せているのではないかと思いますが、問題はあなたが私たちに見せていないコードにあります。
グローバルを使用してはいけない理由
このような混乱は、グローバルの使用が悪い考えであり、避けるべきである理由の一部です。
別の方法は、変数を明示的に渡すことです。たとえば、関数を呼び出したり、別のファイルからクラスをインスタンス化したりする場合は、変数をパラメーターとしてその関数またはコンストラクターに渡します。グローバル変数を使用する代わりにこれを行うと、トレイルを簡単にたどることができるため、どの関数がどの変数にアクセスしているかを簡単に追跡できます。
関数の場合のみ、ファイル間のグローバルは必要ありません。
関数.php
<?php
$foobar = "Hello";
?>
インデックス.php
<?php
include('Functions.php');
echo $foobar;
?>
@thomasrutterは正しい(+1)グローバル変数はA Bad Thing
です。常に代替案を探してください。
おそらく、$ _ SESSION(これは同じことになると思います)を使用するか、静的変数を持つクラスを宣言してgetter()とsetter()を使用できますか?(後者のuiは間違いなくクリーンですが、$ _ SESSIONはあなたのデザインとよりよく結びつくかもしれません、私は言うことができません)
ところで、それfunctions.php
が単なる例の名前であったこと、または非常に単純なプロジェクトがあることを願っています。
そうfucntions.ph
しないと、pが非常に大きくなり、監視が困難になります。OOを使用する場合は、クラスごとに1つのファイルを使用します。それ以外の場合は、関数を個別のファイル(、、など)にグループ化してみてfile_management.php
ください。databse.php
forms.php
始めたばかりの場合は、Netbeansを使用し、PhpDocコメントを使用してコードを文書化することをお勧めします。これにより、ブラウザーで表示できる優れた文書(男女共学の構造、宣言される場所、使用されるものなど)を生成できます。ここで、関数パラメーターと戻り値の説明など)
include()
ところで、私はあなたが私が好むを使用していることに気づきましたrequire_once
。はパフォーマンスを少し向上させるの_once
に役立ち、hterequire
は、不足しているファイルをより迅速に認識できるようにします。
ああ、 NetBeansでうまく機能するXdebugの使い方を学びましょう。
グローバルを使用するべきではありませんが、逆になっています。定義を含めた後、変数 global を宣言します。
file1.php:
$name = 'Josh';
file2.php:
require_once('file1.php');
global $name;
echo $name;