如何将数据正确传递给此结构中引用的类:
-Head Index - PageBuilder - PageSection -Body -Foot
例如,我想发送大量数据,但我想避免这种情况:
new PageSection('head','how to cook',$keywords,$description,$script,$css);
以上看起来很难管理和修改。并且需要传递更多数据,而不是在该示例中显示!
Head,Body和Foot类需要大量用户提供的数据,但发送此数据的最佳方式是什么。请记住,某些数据需要进行硬编码,而某些数据需要根据数据库进行设置,或者在某些情况下需要依赖于默认设置。
答案 0 :(得分:3)
为什么不创建表示参数集的对象?所以你只需传递一个对象,但它包含你的各个参数。一个优点是您可以轻松地重构以添加/删除发送到方法的数据,但不会更改方法调用,因为它们只是处理参数对象。
一个(人为的)示例(在Java中,因为我不支持PHP)
// build the parameters from command-line args
// (you could build from a database or XML or whatever)
PageParameters p = PageParameters.fromArgs(args);
PageSection page = new PageSection(p);
PageParameters
将包含以某种形式构造PageSection
对象所需的属性 - 不一定是PageSection
将自己存储它们的形式。 PageParameters
可以拥有不属于PageSection
的功能(例如命令行args解析,健全检查值等)。
答案 1 :(得分:3)
根据Brian Agnew和Nicky De Maeyer的建议,在构造函数中使用setter和getter以及数组或对象。我的选择框架(Zend)以这种方式处理这个精确的问题。
与仅使用其中一种方法相比,使用这两种方法具有一些优势。
Zend Framework使用可以使用数组实例化的Config对象,可以动态添加或删除。但是当一个配置对象传递给构造函数时,它会立即转换为一个数组并被用作这样的数组。通过这种方式,可以使用Config对象,如果有意义(比如从数据库或配置文件中加载设置)或者只使用数组(如果有意义的话)(比如在代码中设置参数只是对象)实例化)。
此外,Zend Framework提供了getter和setter,以便您可以随时在代码中自由修改对象。否则,您必须销毁现有对象,然后使用调整后的参数重新实例化。
答案 2 :(得分:0)
这可能是定义包含变量的对象。这样您就可以通过名称安全地引用特定属性。您还可以使用地图或数组。例如,jQuery为此目的疯狂地使用params对象,所以在你的代码中你可以拥有(模拟语法)
doSomething(props) {
props.head
props.body
props.foot
}
答案 3 :(得分:-1)
您可以使用setter而不是通过构造函数传递所有内容。
$section = new PageSection('head');
$section->addKeyword();
$section->setDescription();
你可以得到一组set关键字,编辑数组并重置它:
$keywords = $section->getKeywords();
//edit them
$section->setKeywords($keywords);
或者您可以创建更多的子类,但要注意复杂性和不必要的子类化......