1

今のところ、すべてのページに読み込まれるファイルに次のような変数を作成します。

<?php

  add_action( 'parse_query', 'my_global_vars' );
  function my_global_vars() {

    /* CUSTOM GLOBAL VARIABLES */
    $variable_name = get_query_var('category_name');

  }

?>

そして、それを(他のファイルで)使用したいときはいつでも、次のようにする必要があります:

<?php

  global $variable_name;

  if( $variable_name = 'news' ){

    // Do something

  }

?>

同じファイルで変数を複数回使用する必要がある場合はglobal $variable_name;、ファイルの先頭に追加し、$variable_name残りのインスタンスで使用するだけです。

global $variable_nameしかし、変数の数が増えると、すべてのファイルの先頭にある sのリストを管理するのが難しくなります。

作成時に変数をグローバルとして定義し、他の場所で使用する方法はあり$variable_nameますか?

編集: 1 つの方法は、次のように変数を定義することです。

<?php

  add_action( 'parse_query', 'my_global_vars' );
  function my_global_vars() {

    /* CUSTOM GLOBAL VARIABLES */
    global $variable_name;
    $variable_name = get_query_var('category_name');

  }

?>

$GLOBALS[]そして、このように他の場所で使用するように使用し$GLOBALS['variable_name']ます。

4

3 に答える 3

2

これには静的クラスを使用して、OOP のままにすることができます。

<?php
    class GlobalVariables {
        private static $vars = array();

        public static function get($name, $default = null) {
            return (isset(self::$vars[$name]) ? self::$vars[$name] : $default);
        }

        public static function set($name, $value) {
            self::$vars[$name] = $value;
        }
    }

    function foo() {
        GlobalVariables::set('foo', 'oof');
    }

    function bar() {
        var_dump( GlobalVariables::get('foo') );
    }

    foo();
    bar(); //oof
?>

デモ


または、Singleton パターンを使用できます。

<?php
    class GlobalVariables {
        private static $instance;

        private $vars = array();

        public static function get() {
            if (empty(self::$instance)) {
                self::$instance = new GlobalVariables();
            }
            return self::$instance;
        }

        public function __get($name) {
            return (isset($this->vars[$name]) ? $this->vars[$name] : null);
        }

        public function __set($name, $value) {
            $this->vars[$name] = $value;
        }
    }

    function foo() {
        GlobalVariables::get()->foo = 'oof';
    }

    function bar() {
        var_dump( GlobalVariables::get()->foo );
    }

    foo();
    bar(); //oof
?>

デモ

最も読みやすいと思われるものを使用してください。

GlobalVariables::set('key', 'value');
GlobalVariables::get('key');

また

GlobalVariables::get()->key = 'value';
GlobalVariables::get()->key;

完全に別の方法として、動的性が嫌いな場合は、単純に静的変数を使用します (ただし、これには事前にすべての変数を作成する必要があります)。

<?php
    class GlobalVariables {
        public static $foo;
    }

    GlobalVariables::$foo = 'oof';

    var_dump( GlobalVariables::$foo );
?>
于 2013-11-12T17:14:12.847 に答える
2

多くのグローバル変数を持つことは通常悪いことです。それは非常にすぐに混乱します。

本当にグローバル変数が必要な場合は、静的クラス変数を使用するのが最善の方法です。それらは他のものと同じくらいグローバルですが、より良い命名と事前宣言を強制するため、最終結果はいくらか良くなります。

通常のグローバル変数が本当に必要な場合は、$GLOBALS変数を使用することもできます。これはすべてのスコープで使用でき、基本的にすべてのグローバル変数の配列です。

global $variable_name;
do_something_with($variable_name);

と同じです

do_something_with($GLOBALS['variable_name']);
于 2013-11-12T17:17:41.640 に答える