2017-06-06 18 views
1

グローバル変数を使用することは悪い習慣であると私は理解しています。PHP MVCグローバル変数

私はconfig.phpと呼ばれるファイルを作成したいと思いますが、その中に私のクラスで使用するグローバル変数を保存するphpを持つ小さなMVCアプリケーションを持っています...

$config = array(); 
$config ['db_host'] = 'localhost'; 

今、私は自分のアプリケーションでこのファイルをインクルードするための推奨方法はどうなるか知りたいのですが..私は...私はこの中で、それを含めることができ、オートローダーを実装している

Class Autoload 
{ 
    public function __construct() { 
     global $ config; 
     require_once 'config.php'; 
    } 
} 

しかし、私はこれが良い練習であるかどうか本当に分かりません...

ありがとうございます。

+0

これは良い練習ではありません –

+0

こんにちは、お返事ありがとうございます。あなたは私がそれをするより良い方法を見つけるのを助けることができますか?私は本当に別のものを考えることができません。もう一度感謝しますか? –

答えて

2

一般的に言えば、グローバルまたはシングルトンを使用するのは良い方法ではありません。代わりにあなたが望むのは「依存性注入」です。このパターンを使用すると、モックオブジェクトをテストに使用できます。依存関係注入の哲学と実践のいくつかは、この記事で利用可能です。 https://iconoun.com/blog/2017/05/05/php-globals-vs-dependencies/

+0

うわー! ..優秀な記事、私は読んでいます、それを読んだら、確かにあなたは私の最高の答えを取る..この優秀な記事の多く、多くのありがとう –

0

代わりのグローバルあなたはこの

class Autoload { 

    public $value1; 
    public $value2; 
    public static instances = array(); 

    public static function instantiate($className) { 
     if (isset($instances[$className])) { 
      return $instances[$className]; 
     } 
     $newInstance = new $className(); 
     $newInstance->value1 = "foo"; 
     $newInstance->value2 = "bar"; 
     return $instances[$className] = $newInstance; 
    } 
} 

のように、classを作成することができますそして、あなたは、例えば、より具体的な例に異なるユーザータイプをこのclassを継承することができます。