2013-07-05 16 views
0

我正在将我的程序性php项目转换为OOP。我坚持一个问题。 检索表格数据的最佳方法是什么?如何在我的oop类中调用值

跑过ID与构造

new Rate(new Currency($currencyId), $amount); 

或第一设置id和调用getId()方法?

$currency = (new Currency())->setId($currencyId); 
new Rate($currency->getId(), $amount) 
+0

为什么' - > setId()'返回一个对象? –

+0

@Jack返回void的所有方法都应返回$ this;在PHP中能够结合对象的函数调用,Zend Framework使得它非常好用。 – DanFromGermany

+0

@DanFromGermany IMO,这是一个迟钝的想法,没有进攻。 –

回答

1

问一个关于面向对象设计的问题,你会得到100个不同的答案。有许多不同的设计模式可以完成同样的事情。

很难说,因为我们没有看到你的完整设计,但是考虑到你的2个例子,我会去第一个例子。

+0

好的谢谢...... – Namal

+0

要同意克里斯的回答,你的第二个例子就是与'新费率($ currencyId,$ amount)'相同;'所以你的第一个例子更好,利用依赖注入设计模式。 – DanFromGermany

0

仅仅从可读性和打电话的角度来看,我会选择第一个。第二个调用两个独立的调用(一个调用构造函数,另一个调用$currencyId)。

2

Rate对象不应该关心什么$currencyId是,而是应该知道的唯一的事情是,有一个货币:

$rate = new Rate(new Currency($currencyId), $amount); 

如果要防止过多的Currency对象被实例化,你可以引入一个映射:

$mapper = new CurrencyMapper(); 
$rate = new Rate($mapper->getCurrencyWithId($currencyId), $amount); 

应当注意的是,做这一切对象时,必须是不可改变的,根据Flyweight规则。

+0

http://en.wikipedia.org/wiki/Flyweight_pattern – hakre

+0

@hakre感谢提醒我,当您使用flyweight时,对象必须是不可变的;-) –

+0

没有biggie,顺便说一句,我喜欢那种模式。了解它非常有用。 – hakre

相关问题