187

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

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

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

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

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

4

10 に答える 10

282

$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);
于 2012-11-23T13:56:10.200 に答える
84

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

例:

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

function footer()
{
    echo FOOTER_CONTENT;
}
于 2012-11-23T13:55:50.687 に答える
36

変数が関数の外部で宣言されている場合、その変数はすでにグローバルスコープにあります。したがって、宣言する必要はありません。ただし、この変数を呼び出す場所から、この変数にアクセスできる必要があります。関数内から呼び出す場合は、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'];
}

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

于 2018-03-28T17:09:53.960 に答える
31

次のような$GLOBALSスーパーグローバル配列に変数を追加します

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

そしてそれをグローバルに使用する

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

define('HOSTNAME', 'localhost');  
于 2012-11-23T13:55:58.273 に答える
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存在しない場合、変数$ a、$ b、および$cはグローバルスコープになりません。

于 2016-07-12T18:46:26.260 に答える
6

意図に合っている場合useは、クロージャ関数またはLambdasでキーワードを試すことができます...PHP7.0です。それは良いことではありませんが、単なる代替手段です。

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

デモ| 情報

于 2016-08-08T13:32:58.570 に答える
5

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

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

于 2012-11-23T13:55:26.970 に答える
4

グローバル変数を静的属性として宣言できます。

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

そして、次のように、好きな場所で使用および変更できます。

function echo_foo() {
    echo global::$foo;
}
于 2019-02-10T14:38:41.493 に答える
0

変数の代わりに手続き型関数を使用して、どこでも好きな場所でそれらを呼び出すとどうなりますか。

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

function host()
{
   return "localhost";
}
于 2018-03-23T16:17:07.237 に答える
-2

$GLOBALS[] 正しい解決策ですが、代替案について話しているので、関数もこの仕事を簡単に行うことができます。

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

function my_var() {
    return 'Rome';
}
于 2020-05-09T18:36:22.787 に答える