首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过数组定义类选项是一种糟糕的做法吗?

通过数组定义类选项是一种糟糕的做法吗?
EN

Stack Overflow用户
提问于 2010-12-28 22:28:32
回答 7查看 2K关注 0票数 6

当我们查看Javascript框架(如Dojo、Mootools、jQuery、JS原型等)时,我们看到选项通常是通过如下数组定义的:

代码语言:javascript
运行
复制
dosomething('mainsetting',{duration:3,allowothers:true,astring:'hello'});

在编写PHP类时实现相同的想法是一种糟糕的做法吗?

一个例子:

代码语言:javascript
运行
复制
class Hello {

    private $message = '';
    private $person = '';


    public function __construct($options) {

        if(isset($options['message'])) $this->message = $message;
        if(isset($options['person'])) $this->person = $person;
    }


    public function talk() {

        echo $this->person . ' says: ' . $this->message;
    }
}

常规方法:

代码语言:javascript
运行
复制
class Hello {

    private $message = '';
    private $person = '';


    public function __construct() {}


    public function setmessage($message) {

        $this->message = $message;
    }


    public function setperson($person) {

        $this->person = $person;
    }


    public function talk() {

        echo $this->person . ' says: ' . $this->message;
    }
}

第一个例子的优点是,您可以传递任意多的选项,类只会提取它需要的选项。

例如,当从JSON文件中提取选项时,这是很方便的:

代码语言:javascript
运行
复制
$options = json_decode($options);
$hello = new Hello($options);

我就是这样做的:

代码语言:javascript
运行
复制
$options = json_decode($options);
$hello = new Hello();

if(isset($options['message'])) $hello->setmessage($options['message']);
if(isset($options['person'])) $hello->setperson($options['person']);

这种模式有名字吗?你认为这是一种不好的做法吗?

为了保持简单,我在示例中保留了验证等内容。

EN

Stack Overflow用户

发布于 2010-12-28 22:34:48

如果有强制选项,它们应该在构造函数的参数列表中。然后添加带有默认值的可选选项。

代码语言:javascript
运行
复制
public function __construc($mandatory1, $mandatory2, $optional1="value", $optional2="value") { }

如果您的所有选项都是可选的,那么创建一个接受数组的构造函数是有用的。创建对象比使用“普通构造函数”更容易:您可以只提供所需的选项,而如果要提供$optional2,则必须提供$optional1 (甚至将其设置为默认值)。

票数 1
EN
查看全部 7 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4550046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档