2016-08-25 27 views
0

私は、パスやURLなどの基本設定のみを含む設定ファイルを作成しました。クラスを宣言するときに複数のインスタンスを避けるために、構成ファイルクラスに再利用可能なインスタンスが1つしかないことを確認するためにシングルトンを作成しました。別のクラスでも使用できます。それが正しいか?シングルトン構成ファイルを正しく作成していますか?

また、変数が別のクラスにある場合は、変数値の複数の更新を避けたいと考えています。このパターン。私はルートパスを一度しか編集できず、このルートパス変数を使用するすべてのクラスは、ルートパスの同じ値を持つ各クラスのローカル変数を作成するのとは異なり、すでに更新されています。

class Configuration 
{ 
    private static $instance; 
    private $configurations = array("root_path"   => "C:/xampp/htdocs/essentials", 
            "root_url"   => "http://XXX.XXX.XXX.XXX/essentials", 
            "global_class_path" => "/resources/scripts/php/global/classes/", 
            "login_class_path" => "/resources/scripts/php/login/classes/", 
            "time_zone"   => "Asia/Manila"); 

    /* Get the instance of the class */ 
    public static function getInstance() 
    { 
     if (empty(static::$instance)) { 
      static::$instance = new static(); 
     } 

     return static::$instance; 
    } 

    /* Prevent creating of new instance if already existed */ 
    private function __construct() {} 

    /* Prevent cloning of instance */ 
    private function __clone() {} 

    /* Prevent unserializing of instance */ 
    private function __wakeup() {} 

    public function getConfiguration($configuration_id) { 
     return ((empty($this->configurations[ $configuration_id ])) 
       ? null 
       : $this->configurations[ $configuration_id ]); 
    } 
} 
+0

私はそれをしてそれを嫌いました – bassxzero

+0

工場はあなたにシングルトンと同じことを買っていますが、すべてのジャッキーと悪い感じがありません – bassxzero

+0

変数の管理が簡単な提案。例えば別のクラスにある変数の値を更新したい場合は、それらのクラスをすべて更新する必要があります。デザインパターンとは異なります。私は変数の値を1回だけ変更します。 –

答えて

0

ソリューションのcorecnessの質問は最初の私たちが解決しようとしている問題の深い理解が必要です。

まず、選択したソリューションを検討し、問題をもう少し詳しく見ていきましょう。シングルトンは、特定の問題を解決するための設計パターンです。同じクラスの複数のインスタンスを防ぐ。これは、そのクラスの複数のインスタンスを作成して、システムのアーキテクチャ上の制約に違反する問題を作成する場合にのみ役立ちます。たとえば、重大な障害を防ぐためにアーキテクチャが特定の制約を課す必要がある典型的な使用例として、スレッドプールを使用します。

さて、あなたは少しだけ近づくにズームすることにより、この溶液を解決するために外出問題を調べてみましょう。まず、ここで挙げたような制約を作成することで、PHPのコアアーキテクチャに課すことは非常に難しいことに注意することが重要です。 PHPは常に同じ方法で実行されるので、初期化されたクラス、定義されていない関数、定義されていない変数、共有メモリはすべての要求から始まります。実際には何らかの不具合ではない位置クラスのインスタンスが複数存在するようになりました。

システムの重大な障害を正確に防ぐために、実際には構成クラスのインスタンスを2つ以上予防しているわけではありません。あなたのコードはあまりにも複雑になったときに間違いをしないようにしています。

ここで間違いはありますか?あなたの設定クラスが読み取り専用の場合、私はnoneを返します。 実行時にコードがロードされた構成に永続的な変更を加える場合、シナリオはありません。この場合、クラスのインスタンス以上を持つことにどんな害がありますか?

ソリューションは、単にあなたが解決するために出ている根本的な問題を解決していません。

+0

私が掲示したものの代わりにこれを使うべきですか? <?PHP クラス構成{ $ config1 = "ss"; $ config2 = "ss"; } ?> またはこれ? <?php $ config1 = "ss"; $ config2 = "ss"; ?> –

+0

私の答えは変わりません。デザインパターンを使用しようとしてはいけません。本当に対処しようとしている問題のいずれかに実際には対処していません。 – Sherif

+0

デザインパターンと使用変数は、必要なクラスでのみ使用します。異なるクラスで同じ値を持つ変数を使用する場合例。私はフォルダのURLを含む変数を使用し、私は別のコードで同じ値を持つ変数を使用します。そして、私はURLを更新した場合。私は、そのURLを使用するすべての変数を更新する必要があります。デザインパターンとは異なります。その値を変更するのは簡単です –

関連する問題