我有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
函数冲突?
答案 0 :(得分:3)
这是一个坏主意。父母不应该了解他们的孩子。一个班级应该独立,按原样运作。孩子可以延长父母并使用它,因为这种关系是通过x extends y
声明编纂和执行的。父母与孩子之间没有这种关系,所以只看一堂课就不可能说它是否会起作用,因为不知道孩子是否在实施时存在。
重新思考你在做什么。孩子延伸已经完整的父母,父母不依赖孩子。
答案 1 :(得分: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();