0

amfphpで使用されるクラスがあり、その中で他のクラスを使用して複数のタスクを実行しています。これらのクラスのインスタンスをグローバルまたは関数スコープ内に保持するためのベストプラクティスは何であるかを知りたいです。

例えば

グローバル変数$configの場合。私は関数でこのように使用します:

global $config;

スコープ変数の場合、これを行います。

$config = new Config();

今、私のプログラムが実行されると、特定のタスクを処理し、すべてをシャットダウンし(私が想定している)、別の別のタスクに対しても同じように呼び出します。

どちらが優れていて、パフォーマンスが効果的ですか?

4

1 に答える 1

4

PHPはリクエストベースであるため、オブジェクトを初期化する場合、とにかくリクエストごとに再作成されるため、大きな違いはありませんが、グローバルを使用することは悪い習慣と見なされ、新しいコードIMOでは使用しないでください。

2番目の例のように構成クラスを作成することをお勧めしますが、コード内の複数の場所で構成クラスが必要な場合は、毎回新しいインスタンスを作成するのではなく、依存性注入またはシングルトンパターンを使用してください。

シングルトン:

public class Config
{
    protected static $instance;
    public static Instance()
    {
        if(self::instance === null)
            self::instance = new Config(self::key);
        return self::instance;
    }

    private static $key = "213453452";
    public function __construct($key)
    {
        if($key !== self::key)
            throw new InvalidArgumentException("Private Constructor");
    }

    //your config
}

依存性注入(簡単な例):

public class MyClass
{
    protected $config;

    public __construct($config)
    {
        $this->config = $config;
    }

    public function DoWork()
    {
        $subClass = new MySubClass($this->config);
        //To Stuff
    }
}

$config = new Config();
$myClass = new MyClass($config);
$myClass->DoWork();
于 2013-03-26T08:46:07.860 に答える