我需要构建一个类来生成(并提交,验证等) web表单。我还有一个通过编写PHP代码生成原始HTML的类。
现在,当设计类来构建web表单时,我需要很多HTML生成器相关的活动,换句话说,我需要HTML生成器类在很大程度上完成一些功能。我可以通过两种方式做到这一点:
class WebForm extends HTML {}
$html)。我可以将它作为参数传递到WebForm类的构造函数中:类WebForm{公共$html;公共函数__construct( $html ) { $this->html = $html;}$html=新HTML();//已为其他目的创建的$webform =新的$html
哪种方法是 &为什么?
发布于 2011-09-11 17:24:54
这几乎肯定会产生微不足道的影响,除非您正在对HTML方法进行数百万次调用。
如果我不得不猜测(这实际上只是猜测),那么我会说选项1可能会更快(当然也会更快)。其基本原理是,调用HTML方法所需的间接方向减少了一个级别。但要证实这一理论,唯一的办法是依次分析每个选项。
还要注意的是,您应该首先为清晰性设计类,其次才设计性能类(并且只有在确认这是一个问题时才会这样做)。例如,您应该问问自己,让WebForm扩展HTML是否有意义;说Webform 是 HTML是否有意义?
发布于 2011-09-11 17:25:51
扩展方法更快,因为您将只实例化单个对象。但是,如果您只在一页中执行一次,则这是不可测量的。
其组成方法较好,具有良好的可维护性。
顺便说一句,您应该认真考虑将所有HTML生成代码移到模板引擎上。只需呈现来自表单类的模板,并且只处理PHP中的验证,而不是HTML生成,否则您将在控制器中完成与视图相关的任务。
发布于 2011-09-11 17:27:15
就C术语而言,一个指针取消引用操作比聚合方法(它需要额外的$this->html取消引用)更快。在PHP中,它应该是可比的。
然而,一个指针取消引用的成本几乎可以忽略不计。--您不应该将您的体系结构建立在这种纯理论差异的基础上,,因为它永远都不值得。即使您已经每秒处理数百个请求,并且需要额外的性能,但这并不是可行的方法。这是一个典型的情况,在这种情况下,聚合比继承更受欢迎。
最后,考虑使Html类只具有static方法。这是完全合理的,因为它是一个助手类,所以它实际上不需要维护任何状态。如果出于某种原因,您认为它需要某种状态,那么让调用方维护它,并将它作为函数参数传递给Html。这不仅将改进您的设计,而且还将删除我们前面讨论过的附加指针取消引用。此外,它将完全消除实例化Html实例的开销,即使您需要在单个请求的生存期内实例化多个WebForm对象(考虑的两种方法都有此缺陷)。
https://stackoverflow.com/questions/7379950
复制相似问题