与同事讨论过这是否是不好的实践,现在我找不到在线上的即时例子。
我们有很多数据库对象映射器,并像以下方式调用它们的函数:
(示例) - setId方法从数据库获取行并将其设置为预定义属性
class Person {
public static function get($id) {
$object = new Person;
$object->setId($id);
return $object;
}
}
使用它,我们可以像这样使用简单的结构:(其中我们从某个帖子中获得了id)
$person = Person::get($id);
取代
$person = new Person;
$person->setId($id);
现在,我的直觉告诉我这是一种不好的做法。但我无法解释为什么。也许这里有人可以解释这是为什么,或者不是不好的做法。
以下是一些我们使用它的其他示例。我们主要将其用于获取器(只有名称,没有代码)。几乎所有的获取器都执行一个查询,可能返回1个对象,然后使用结果的ID来使用setId方法。
class CatalogArticle {
public static function get($id) { }
public static function getByArticlenumber($articlenumber) {} //$articlenumber is unique in the database
public static function getRandom() {} //Runs a query returning a random row
}