以下の編集を参照してください
PHP での OOP 開発に飛び込もうとしていますが、本当に頭痛や潰瘍ができ始めています。頭がまとまりません。部分が非論理的すぎるように思えます。どこから始めればよいか見当もつきません。それを学ぶ努力をする価値があると信じており、より良い概要を提供してくれるので、本当にイライラします。私のコードについて。
昨日は一日中インターネットで実践例や解説記事を探していましたが、今はもっと混乱しているように感じます。次のような例ではなく、実用的なヒントが必要です
class person {
var $name;
function set_name($new_name) {
$this->name = $new_name;
}
function get_name() {
return $this->name;
}
}
$stefan = new person();
$jimmy = new person;
$stefan->set_name("Stefan");
$jimmy->set_name("Jimmy");
echo "Stefan's full name: " . $stefan->get_name();
echo "Jimmy's full name: " . $jimmy->get_name();
このような例を見ると、なぜすべきではないのか疑問に思います (すべて同じページで定義されているため)。
$name = "Stefan";
echo "Stefan's full name: ".$name;
あなたが私に尋ねると、より短く(コードが少なく)、より明白になりますか?
私のプロジェクトにノウ。
私が作ろうとしているのは、シンプルなポートフォリオのウェブサイトです。したがって、ホームページ、情報ページ、仕事に関するページ、連絡フォームの 4 ページだけが必要です。私は 3 つのテーブルclients
を使用し、自分の作業ページで使用したいと考えていcontent
ます。media
私は自分の構造について考えていて、次のようなものを思いつきました(頭の中で、それを達成する方法の手がかりがありません)
class Database{}
class Content extends Database{}
function showMenu(){}
function showContent{}
class Clients extends Database{}
function showClientList{}
function showClientDetails{}
class Media extends Database{}
パブリック メソッドでデータベース接続を確立するデータベース クラスを作成済みquery($qry)
です。クラスから始めましたがContent
、現時点では次のようになっています。
class Content extends Database {
public function topMenu($page){
$db = new Database();
$db->connect();
$db->query("SELECT m_link, m_title, m_accesskey FROM menu WHERE m_type = 'top'");
$res = $db->getResult();
foreach($res AS $show){
if($page == $show['m_link']){
echo("<li id="active">$show['m_title']."</li>\n");
}else{
echo("<li>$show['m_title']."</li>\n");
}
}
}
}
ところで、これはまったく意味がありますか?
私のindex.phpには、メニューを表示するための次の行があります(正常に動作します)$content = new Content(); $content->topMenu($_aGET[0]);
私がそれを失っているポイントは、変数(URLを保持する)に依存するクライアントリストまたはクライアントの詳細のいずれかを表示する方法です。$_aGET[0]
クライアントの詳細を表示したいとします。そのため、3 つのテーブルすべてのレコードが必要なので、通常は 2 つの結合を使用します。
$query = "
SELECT cl.c_id, cl.c_client, cl.c_client_desc, ncc.clco_cl_id, ncc.clco_co_id, co.c_content, ncm.clme_me_id, ncm.clme_cl_id, GROUP_CONCAT(me.m_link) AS images_link
FROM clienten AS cl
LEFT JOIN norm_cl_co_rel AS ncc ON cl.c_id = ncc.clco_cl_id
LEFT JOIN content AS co ON ncc.clco_co_id = co.c_id
LEFT JOIN norm_cl_me_rel AS ncm ON cl.c_id = ncm.clme_cl_id
LEFT JOIN media AS me ON me.m_id = ncm.clme_me_id
WHERE cl.c_client = '".mysql_real_escape_string($_aGET[1])."'
AND cl.c_language_id = '"._LANGUAGE."'
AND cl.c_active = '1'
";
しかし、私が OOP の考えを理解している限り、クラスで定義されたテーブルごとにメソッドが必要です (そうですか?) しかし、これらを結合するにはどうすればよいでしょうか?
それとも、私の「ストーリー」は次のようなものですか?
編集:
わかりました、Fluffeh の投稿の後、私は彼の例を使用し、それを少し変更してテストしました。問題は、出力が得られることですが、望ましいものではありません。私の出力は以下のようなものです
ID: 会社名 ハ 内容:C メディア: : : : : :
取得する必要がありますが(値はデータベースにあります):
ID: 会社名 会社名 説明: CompanyName は会社です メディア: :画像1 :画像2 :画像3 :画像4 :画像5
私のコードは次のようになります。
class media{
public $type;
public $title;
public $image;
public $desc;
}
class client{
public $name;
public $desc;
}
class clientDetails{
private $clientID;
public $clientName;
public $clientDesc;
public $clientMedia = array();
public $clientMediaFiles = 0;
public function __construct($myID){
$this->clientID = $myID;
}
public function getMyDetails(){
$db = new Database();
$db->connect();
$db->query("
SELECT c_client, c_client_desc
FROM clienten
WHERE c_client = '".mysql_real_escape_string($this->clientID)."'
");
foreach($db->getResult() as $client){
$this->name = $client['c_client'];
$this->desc = $client['c_client_desc'];
}
$db = new Database();
$db->connect();
$db->query("
SELECT ncm.clme_me_id, ncm.clme_cl_id, cl.c_id, me.m_id, me.m_type, me.m_title, me.m_desc, me.m_link
FROM norm_cl_me_rel AS ncm
LEFT JOIN clienten AS cl ON cl.c_id = ncm.clme_cl_id
LEFT JOIN media AS me ON me.m_id = ncm.clme_me_id
WHERE me.m_id IN(1,2,3,4,5)
");
foreach($db->getResult() as $media){
$this->clientMedia[$i]= new media();
$this->clientMedia[$i]->type = $media['m_type'];
$this->clientMedia[$i]->title = $media['m_title'];
$this->clientMedia[$i]->image = $media['m_image'];
$this->clientMedia[$i]->desc = $media['m_desc'];
$this->clientMediaFiles++;
}
}
public function displayMyResults(){
echo "ID: $this->clientID";
echo "<div><h3>".$this->name."</h3>";
echo "Desc: ".$this->desc."<br>";
echo "Media:<br>";
for($i=0;$i<$this->clientMediaFiles;$i++){
echo $this->clientMedia[$i]->title." : ".$this->clientMedia[$i]->desc."<br>";
}
echo "</div>";
}
}