PHPでグローバル変数を宣言する方法は?


168

私はこのようなコードを持っています:

<?
    $a="localhost";
    function body(){
        global $a;
        echo $a;
    }

    function head(){
        global $a;
        echo $a;
    }

    function footer(){
        global $a;
        echo $a;
    }
?>

1つの場所でグローバル変数を定義し、$a一度にすべての関数で変数にアクセスできるようにする方法はありますか?global $a;もっと活用せずに?


15
いいえ、ありません。globalキーワードが気に入らない場合は$GLOBALS['a']、すべてのスコープでスーパーグローバルを使用するか、関数にパラメーターを渡すことを検討してください。
Michael Berkowski

5
それが重要な場合は、セッション変数も使用できます。
Nikos Tsirakis

回答:


259

$GLOBALS配列を代わりに使用することができます。

$GLOBALS['a'] = 'localhost';

function body(){

    echo $GLOBALS['a'];
}

マニュアルから:

スクリプトのグローバルスコープで現在定義されているすべての変数への参照を含む連想配列。変数名は配列のキーです。


いくつかの一般的な変数を必要とする関数のセットがある場合、プロパティのあるクラスがグローバルの代わりに良い選択かもしれません:

class MyTest
{
    protected $a;

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

    public function head()
    {
        echo $this->a;
    }

    public function footer()
    {
        echo $this->a;
    }
}

$a = 'localhost';
$obj = new MyTest($a);

78

変数が変更されない場合は、使用できます define

例:

define('FOOTER_CONTENT', 'Hello I\'m an awesome footer!');

function footer()
{
    echo FOOTER_CONTENT;
}

2
とき何が起こるFOOTER_CONTENT修正しようとしていますか?それfinalはJavaやconstC、C ++、C#と同じですか?
ライオン

4
FOOTER_CONTENTをもう一度定義しようとすると、phpはそれに関する通知をスローします
Dale

ページが読み込まれるたびに現在のUNIXエポック時間を計算し、その値をいくつかの計算(関数)で使用する必要がありました。「定義」は私のために働いた。最初は、「エコーFOOTER_CONTENT;」は表示されませんでした。前に「$」がないため、エラーが発生しました。
user208145 2016年

変数が変化しない場合は、変数ではありません。じゃないですか!
Sajidur Ra​​hman、2018

29

$ GLOBALSスーパーグローバル配列に変数を追加します。

$GLOBALS['variable'] = 'localhost'; 

そしてそれをグローバルに使う

または、スクリプト全体からアクセスできる定数を使用できます

define('HOSTNAME', 'localhost');  

1
一度「定義」を使用すると、定義を変更することはできません!
Reza MA

最初の例では、 '$ variableがスクリプトの後半で' localhost 'と呼ばれるようになっていますか?
Zach Smith、

この変数を使用する場合は、$ GLOBALS ['variable']のように使用する必要があります。
Pankaj Khairnar、2015年

25

変数が関数の外部で宣言されている場合、その変数はすでにグローバルスコープにあります。したがって、宣言する必要はありません。ただし、この変数を呼び出す場所から、この変数にアクセスできる必要があります。関数内から呼び出す場合は、globalキーワードを使用する必要があります。

$variable = 5;

function name()
{
    global $variable;

    $value = $variable + 5;

    return $value;  

}

関数外でグローバルキーワードを使用してもエラーにはなりません。このファイルを関数内に含める場合は、変数をとして宣言できますglobal

config.php

global $variable;

$variable = 5;

other.php

function name()
{
    require_once __DIR__ . '/config.php';
}

あなたも使うことができます$GLOBALS。それはスーパーグローバルなので、どこからでもアクセスできます。

$GLOBALS['variable'] = 5;

function name()
{
    echo $GLOBALS['variable'];
}

選択に応じて、どちらかを選択できます。


9

この答えは非常に遅いですが、ブール、配列、整数初期値をグローバルスコープの静的変数として保持するクラスを設定しています。定数文字列はそのように定義されます。

define("myconstant", "value"); 

class globalVars {

    static $a = false;

    static $b = 0;

    static $c = array('first' => 2, 'second' => 5);

}


function test($num) {

    if (!globalVars::$a) {

        $returnVal = 'The ' . myconstant . ' of ' . $num . ' plus ' . globalVars::$b . ' plus ' . globalVars::$c['second'] . ' is ' . ($num + globalVars::$b + globalVars::$c['second']) . '.';

        globalVars::$a = true;

    } else {

        $returnVal = 'I forgot';

    }

    return $returnVal;

}

echo test(9); ---> The value of 9 + 0 + 5 is 14.

echo "<br>";

echo globalVars::$a; ----> 1

staticキーワードは$、$ bはvarsの、および$ cは、グローバルスコープされることはありません、他のクラスに存在する必要があります。


これは多くの理由で良い解決策です。staticクラスは、基本的な変数名G :: $ Nameにいくつかの文字を追加するだけで済みます。宣言は次のようになります。従業員に関連する変数に使用できます。これは、PHPでサポートされている本格的なオブジェクト指向パラダイムよりもプログラミングが簡単です。定数が本当に必要な場合は、「静的」の後に宣言された変数と同じように、「定数」の後に宣言できます。ドル記号は省略します。G :: Exampleは、グローバル定数の例です。
デビッドスペクター

5

あなたはあなたが質問を書いた方法でこれに答えました-「定義」を使用してください。ただし、いったん設定すると、定義を変更することはできません。

または、クラスに定数を使用するトリックがあります。たとえば、class :: constantを使用できます。また、静的プロパティをクラスに宣言することにより、それらを変数にすることもできます。静的プロパティを変更する場合は、静的プロパティを設定する関数を使用できます。


5

これがあなたの意図に合うならuseクロージャー関数またはラムダでキーワードを試すことができます...しかし、PHP 7.0。それは良いことではありませんが、ただの選択肢です。

$foo = "New";
$closure = (function($bar) use ($foo) {
    echo "$foo $bar";
})("York");

デモ | 情報


1

少し違うものを考えてみましょう:

class globe{
    static $foo = "bar";
}

そして、あなたはそれを好きなように使って修正することができます:

function func(){
    echo globe::$foo;
}

0

変数の代わりに手続き型関数を使用し、どこからでも呼び出すことができるとしたらどうでしょう。

私は通常、構成値のコレクションを作成し、それらをreturnステートメントを使用して関数内に配置します。グローバル値を利用して特定の関数を呼び出す必要がある場所に、それを含めます。

function host()
{
   return "localhost";
}

0

$GLOBALS[] ある適切なソリューションは、しかし、我々は選択肢の話をしていることから、機能も簡単にこの仕事を行うことができます。

function capital() {
    return my_var() . ' is the capital of Italy';
}

function my_var() {
    return 'Rome';
}

-19

グローバルは使用しないでください。グローバルはPHP 5.4では使用できません。


19
REGISTER GLOBALSが削除されました。グローバルではありません。
unity100 2014

7
書かれているとおり、この回答は誤りであり、Unity100のコメントを反映するように更新する必要があります。GLOBALSがまだ利用できる場合は、GLOBAL変数のどの側面が変更されたかを明確にしてください。このようなもの。
crashwap 2015年


@RobertColumbia非常に興味深い投稿です。他の回答についても気に留めておきますが、この特定のケースには当てはまりません。(私はあなただけの答え「それがそうしていない」どのように指摘しているメタを使用している願っていかもしれません) ";有効ではないこの1つがあることを正当化すること)『のことをしないでください』 することができ 、有効な答えであります。「-」は「する」ではない 「しかし、時々、代わり何もする必要はありません。あなたが間違ったことをやめるだけなら、すべてが魔法のように再び働き始めます。OPは、「タイピングの少ない」方法で実行したいだけです。…
robinCTS

実際に質問に答えようとしているのですか?ほとんどの場合、それはそうです。」-「すべて」ではなく「最も」(私は「ほとんど」に異議を唱えるつもりですが、私は十分な情報を得た議論をするのに十分なそのような答えを見ていません。)「この場合、それはありません。」 -そして、この「答え」で、それはまたはない、非常に同じ理由のために:「さらに悪いことに、マーフィーの答えは、問題の解決策を提案していない」と「それは与えるものではありません。質問者はツールやメソッドなど、彼の問題の解決策に似たものを何でも」…
robinCTS
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.