我總是困惑於哪種方式是最好做以下事情。例如,假設我們有兩個類BlogPost
和Tag
,它們對應於數據庫表Posts
和Tags
。在另一個類中實例化一個類還是應該是獨立的?在另一個類中實例化類是不好的設計嗎?
class BlogPost {
private $db;
private $title;
private $description;
private $tagsArray;
public function __construct($db){$this->db = $db;}
public function getTitle(){/*...*/}
public function getDescription(){/*...*/}
public function getTags(){/*...*/}
public function setTitle($title){/*...*/}
public function setDescription($desc){/*...*/}
public function setTags($tags){/*...*/}
public function addPost(){
//insert into database query
//bindParams
//execute
$this->addTags($this->db->last_insert_id());
}
public function addTags($lastInsertId){
require_once('class.Tag.php');
foreach($tagsArray as $tagItem){
$tagClass = new Tag($this->db, $lastInsertId);
$tagClass->setTagName($tagItem["title"]);
$tagClass->addTag();
}
}
}
的index.php
require_once('class.BlogPost.php');
$blogPost = new BlogPost($db);
$blogPost->setTitle("title");
$blogPost->setDescription("description");
$blogPost->setTags($tagsArray);
$blogPost->addPost();
或者是更好地保持獨立的班?像這樣:
class BlogPost {
private $db;
private $title;
private $description;
public function __construct($db){$this->db = $db;}
public function getTitle(){/*...*/}
public function getDescription(){/*...*/}
public function getId(){/*...*/}
public function setTitle($title){/*...*/}
public function setDescription($desc){/*...*/}
public function setId($id){/*...*/}
public function addPost(){
//insert into database query
//bindParams
//execute
$this->setId($this->db->last_insert_id());
}
}
的index.php
require_once('class.BlogPost.php');
$blogPost = new BlogPost($db);
$blogPost->setTitle("title");
$blogPost->setDescription("description");
$blogPost->addPost();
$lastInsertId = $blogPost->getId();
require_once('class.Tag.php');
$tagClass = new Tag($db, $lastInsertId);
$tag->setTags($tagsArray);
$tag->addTag();
感謝您的信息!
**它肯定是,現在仍然是,糟糕的設計** .. – Jimbo
@Jimbo:'addTags'內創建的實例不會泄漏到外部甚至更多,如果仔細閱讀代碼,您會看到「addTags」本身甚至不應該首先公開。你認爲什麼是不好的設計,爲什麼? – Jon
也許我們應該編輯你的答案來澄清?我相信你對OP的問題的迴應:*在另一個類中實例化一個類是否糟糕?*是:「這當然不是壞設計」。大聲笑! – Jimbo