PHP MVC:模型之间的关系(人:联系人,星座运势,..)


PHP MVC: Relationship between models (Person: Contact, Horoscope, ...)

我现在正在学习PHP,MVC和"Simple MVC Framework for PHP"。

我有一个模型叫做人:

<?php
namespace Models;
use Core'Model;
use Helpers'Database;
use Core'Error;
class Person extends Model {
    protected $db;
    protected $tname = 'person';
    function __construct() {
        parent::__construct ();
        $this->db = Database::get ();
    }
    public function getPersons() {
        return $this->db->select ( "SELECT firstname, lastname FROM " . PREFIX . $this->tname );
    }
    public function insertPerson($data) {
        if (is_array ( $data )) {
            $this->db->insert ( PREFIX . $this->tname, $data );
            return $this->db->lastInsertId ( 'personID' );
        } else {
            // Error::display ( '$data is not an array.' ); // TODO: not in model
        }
    }
}

联系:

<?php
namespace Models;
use Core'Model;
use Helpers'Database;
class Contact extends Model {
    protected $db;
    function __construct() {
        parent::__construct ();
        $this->db = Database::get ();
    }
    // handle telephone, mobile, fax, emails, ...
}

每个人都有其他模型,如联系人(1:1),生活(1:n),星座运势(1:1),社交媒体(1:1)。

如何设计它们之间的关系?我应该在个人自我(构造函数)中注册这些模型吗?

这是一个非常开放的问题,因为有很多方法可以做到这一点。我处理这个问题的方法是让 getter 负责在需要时初始化模型。

例如,你的类 Person 可以有方法contact()、living() 等等。这些方法如下所示:

public function contact()
{
  if($this->_contact_model == null) {
    $this->_contact_model == new Contact();
    // ... 
  }
  return $this->_contact_model;
}

然后$person Person 对象访问联系人方法应该像这样简单:

 $person->contact()->getSomeContactProperty();