设计模式,单例和传递参数

时间:2014-07-16 22:49:27

标签: php design-patterns

有一个主题我已经挣扎了很长一段时间,它存在于静态方法,单例和传递参数的应用程序领域。我一直试图找到一种方法来使用类来传递变量。这是一个例子:

class EmployeeSettings { 

    private static $statuses = array();
    private static $isInit = false;

    private static function init() {
        if(self::$isInit) return;

        self::$statuses = array(
            'active' => array(
                'value' => 0,
                'name' =>'Active'
            ),
            'terminated' =>array(
                'value' => 1,
                'name' =>'Termninated'
            ),
            'suspended' => array(
                'value' => 2,
                'name' =>'Suspended'
            ),  

        );  

        self::$isInit = true;
    }

    public static function getStatuses() {
        self::init();
        return self::$statuses;
    }   

    public static function getStatusName($status) {
        self::init();
        foreach(self::getStatuses() as $ref => $info) {
            if($info['value']==$status) {
                return self::$statuses[$ref]['name'];   
                break;
            }
        }   
    }
}

这样我就可以在整个应用中访问EmployeeSettings的任何参数。 可以构建类似的模式,其中将存储所有应用程序的配置:

class CoreConfig
{
    static $confArray;

    public static function read($name)
    {
        return self::$confArray[$name];
    }

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

}

非常方便"因为我可以得到任何我需要的配置设置。 有些人会说,出于多种原因要避免这种类型的设计,其中没有一个似乎告诉我为什么它们会变坏以及为什么要避免它们。通常,在概念上和架构上允许仅访问特定类的一个实例是有道理的,并且我不确定如何继续进行。

1 个答案:

答案 0 :(得分:2)

有一段时间,单身人士风靡一时。

然后有人发现他们真的是伪装的全球人!哦,恐怖!!

现在愤怒是Dependency Injection。有一天,一个新的"新的"会来,DI也会受到鄙视。

便利性稍纵即逝。迟早会让你失望。您可以尝试MVC框架,而不是尝试重新发明轮子。他们中的一些人正在使用最新的范例并且非常扎实。我更喜欢Symfony2Laravel目前非常受欢迎。有many others