【问题标题】:how to call values in my oop class如何在我的 oop 类中调用值
【发布时间】:2013-07-05 16:04:50
【问题描述】:

我正在将我的程序 php 项目转换为 OOP。我坚持一个问题。 检索表数据的最佳方法是什么?

使用构造函数传递 id

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

还是先设置id再调用getId()方法?

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

【问题讨论】:

  • 为什么->setId()会返回一个对象?
  • @Jack 所有返回 void 的方法都应该返回 $this;在php中为了能够结合对象的函数调用,Zend Framework 很好的利用了它
  • @DanFromGermany IMO,这是一个迟钝的想法,无意冒犯。
  • @DanFromGermany ,方法的名称应该描述它的作用。您可能会注意到,它没有被称为 setIdAndGetThisInstance()
  • 它在 php 中非常常见和有用...... setId 应该返回什么?它是一个空函数。查看迭代器类:Iterator->next() 给你一个对象,Iterator->last() 给你最后一个对象,..stackoverflow.com/questions/6138758/…

标签: php oop


【解决方案1】:

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

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

如果你想防止太多Currency对象被实例化,你可以引入一个映射器:

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

需要注意的是,根据Flyweight的规则,所有对象都必须是不可变的。

【讨论】:

  • @hakre 感谢您提醒我使用享元时对象必须是不可变的;-)
  • 没什么大不了的,顺便说一句,我喜欢这种模式。了解它非常有用。
【解决方案2】:

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

很难说,因为我们没有看到您的完整设计,但是鉴于您的 2 个示例,我会选择第一个。

【讨论】:

  • 同意 Kris 的回答,您的第二个示例将与 new Rate($currencyId, $amount); 相同,因此您的第一个示例更好,使用依赖注入设计模式。
【解决方案3】:

仅从可读性和调用次数的角度来看,我会选择第一个。第二个进行两次单独的调用(一次调用构造函数,另一次设置$currencyId)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    相关资源
    最近更新 更多