web-dev-qa-db-ja.com

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

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

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

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

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

グローバル変数を1か所で定義し、変数$aをすべての関数で同時にアクセス可能にする方法はありますか?もっとglobal $a;を使わずに?

153
LIGHT

$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);
241
MrCode

変数が変わらない場合は、 define を使用できます。

例:

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

function footer()
{
    echo FOOTER_CONTENT;
}
73
Dale

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

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

そして世界的にそれを使う

あるいは、スクリプト全体を通してアクセス可能な定数を使用することもできます。

define('HOSTNAME', 'localhost');  
28
Pankaj Khairnar

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

$variable = 5;

function name()
{
    global $variable;

    $value = $variable + 5;

    return $value;  

}

関数外でglobalキーワードを使用してもエラーにはなりません。このファイルを関数内に含めたい場合は、変数を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'];
}

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

14
Sajidur Rahman

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

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キーワードはクラスに存在しなければなりません、そうでなければvars $ a、$ b、および$ cはグローバルにスコープされません。

あなたの意図に合っていればClosure関数やLambdasでキーワードuseを試すことができます... PHP 7.0 。それはそれがより良いのではなく、ただの代替案です。

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

デモ | info

4
Thielicious

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

あるいは、class :: constantのように、クラス内に定数を使ったトリックがあります。静的プロパティを変更したい場合は、そのプロパティを設定する関数を使用して、クラスに静的プロパティを宣言することによって変数を可変にすることもできます。

4
Robbie

少し違うと思いましょう。

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

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

function func(){
    echo globe::$var;
}
1
Amir Forsati

もしあなたが変数の代わりに手続き型関数を利用して、あなたがどこにいようとも呼んだ場合はどうなるでしょう。

私はたいてい設定値の集合を作り、それらをreturn文を使って関数の中に入れます。私はグローバルな価値を利用し、特定の機能を呼び出す必要があるところにそれを含めるだけです。

function Host()
{
   return "localhost";
}
0
Veshraj Joshi