私はOOPで本当に新しいです、とよくない英語話者なので、私の質問がダムである場合、私は申し訳ありませんがあります。 私はoopを理解していると思っていましたが、私がそれを使ってコードを書き始めると、うまくいくと思います。 次のコードは私の最初の試みです、私はそれらの後に私の質問をします。 (私は、データベース・コードをカットしますが、私はプログラムの動作言ったように。)は(PHPを使用して)OOPにおける関係
// class.Post.inc
class Post {
private $_db;
private $_postId;
private $_title;
private $_creatorId;
public function __construct() {
$this->_db = Database::getInstance()->getConnection();
}
public function getApost($postId = 0) {
if($postId){
/* get the post data from database(including user_id) and put them in the instance variables */
$this->_postId = $row ['post_id'];
$this->_title = $row ['title'];
$this->_creatorId = $row ['user_id'];
}
}
public function getCreator() {
$creator = new User();
return $creator->getUserObject ($this->_creatorId);
}
public function getPostId() {
return $this->_postId;
}
public function getTitle() {
return $this->_title;
}
}
//class.User.inc
class User {
private $_db;
private $_userId;
private $_name;
public function __construct() {
$this->_db = Database::getInstance()->getConnection();
}
public function getUserObject($userId = null) {
if ($userId) {
/* read data from database and put them in the instance variables */
$this->_userId = $row ['user_id'];
$this->_name = $row ['name'];
return $this;
}
return false;
}
public function getUserId() {
return $this->_userId;
}
public function getName() {
return $this->_name;
}
}
// index.phpの
spl_autoload_register (function ($className) {
require_once 'classes/class.' . $className . '.inc';
});
$post = new Post();
$post->getApost(1);
$creator = $post -> getCreator();
echo $post->getPostId() . '<br>';
echo $post->getTitle() . '<br>';
echo $creator->getName() . '<br>';
私の質問:
- 投稿者は作成者を持っています。この関係を正しく設計できますか?
- 投稿を投稿者とその作成者を一緒に選択するにはどうすればいいですか?
- 投稿のリストを表示する場合は、投稿クラスまたはインデックスページに新しいメソッドを定義するか、新しいクラスを定義する必要がありますか?どうやって?
http://codereview.stackexchange.com/ – k0pernikus
上のより良いフィットあなたがあなたのコードの間違いがある可能性があります。 1)DI https://en.wikipedia.org/wiki/Dependency_injectionとして接続を渡す必要があります。 2) 'getUserObject'、' getApost'はエグゼクティブ 'new User(userId)'、 'new Post(postId)'は適切なクラスインスタンスを返すべきです。 https://en.wikipedia.org/wiki/Active_record_patternもチェックしてください –