-1

我有 5 个不同的模型类。每个都处理不同类型的数据,但它们都遵循相同的格式。

我希望每种模型都共享 toJson、toArray 等函数。

有很多黑客方法我可以做到这一点,我可以弄清楚这些,但必须有更好的方法。

这是我想要的效果:

<?
something here{
    function toJson(){return json_encode($this->lastResult);}
}
class applications{
    function findAllFoo(){
        $this->lastResult = $this->db->foo->find();
        return $this;
    }
}

class users{
    function findAllBar(){
        $this->lastResult = $this->db->bar->find();
        return $this;
    }
}
$models = new models();

echo $models->applications->findAllFoo()->toJson();
echo $models->users->findAllBar()->toJson();

我可以只new applications($this)为每个模型传递一整套类,但我确信标准实践中有一种方法可以做到这一点。

TL;DR - 我如何拥有一组共享一些辅助函数但又不会与__construct函数冲突的类?

4

2 回答 2

3

这是一个坏主意。父母不应该知道他们的孩子。一个类应该独立存在,按原样工作。孩子可以扩展父母并使用它,因为这种关系是通过x extends y声明编纂和强制执行的。但是,父母与孩子之间没有这种关系,所以仅仅看一个类就不可能说它是否会起作用,因为在实现时不知道孩子是否存在。

重新考虑你在做什么。孩子延伸已经完全的父母,父母不依赖孩子。

于 2012-12-01T12:52:55.427 回答
1

如果所有模型都共享一些功能,为什么不为它们创建一个“模型”基类呢?

abstract class Model {
    protected $lastResult;
    protected $db;

    public function __construct(DB $db) {
        $this->db = $db;
    }

    public function toJson() {
        return json_encode($this->lastResult);
    }
}

class Applications extends Model {
    public function findAllFoo() {
        $this->lastResult = $this->db->foo->find();
        return $this;
    }
}

class ModelBroker {
    public $applications;

    public function __construct() {
        $db = /* ... connection code here ... */;
        $this->applications = new Applications($db); // <-- dependency injection
    }
}

$models = new ModelBroker();
$json = $models->applications->findAllFoo()->toJson();
于 2012-12-01T13:20:04.877 回答