ホームページ  >  記事  >  バックエンド開発  >  PHP を使用してオブジェクト指向ブログを作成する方法

PHP を使用してオブジェクト指向ブログを作成する方法

WBOY
WBOYオリジナル
2023-08-30 19:21:091242ブラウズ

如何使用 PHP 创建面向对象的博客

この記事では、簡単なブログを作成することで、PHP と MySQL の知識をさらに深めます。市場には無料の優れたブログ プラットフォームが無数にありますが、このチュートリアルの目的は、ブログ Web サイトの作成プロセスを調査して、高度なデータベース構造テクニックと、PHP のオブジェクト指向プログラミングを使用してデータをより効率的に使用する方法を学ぶことです。

このチュートリアルでは、PHP、MySQL、および XHTML についてある程度の基本を理解していることを前提としています。

データベース構造の参照

MySQL クライアントに移行してテーブルの作成を開始する前に、ブログで必要なことの概要を説明する必要があります。明らかに含める必要があるのはブログ投稿です。各投稿には、タイトル、投稿自体、作成者、公開日を含める必要があります。

あとは、この情報を保持するテーブルを作成するだけです。おそらく基本的なブログが正常に作成されます。ただし、テーブルが 1 つしかない場合は、データをあまり制御できません。たとえば、作成者の名前をブログ投稿と同じテーブルに保存できますが、作成者の電子メールも保存したい場合はどうすればよいでしょうか?テーブルに別のフィールドを追加するのが明らかな解決策です。

問題は、後で作成者の電子メール アドレスを変更したいときに発生します。今後は、その人が作成するブログ投稿ごとにこれを変更する必要があります。

そこで、私たちがやりたいのは、電子メール、URL、名前、一意の ID など、作成者に関するすべての情報を保存できる people という別のテーブルを作成することです。次に、blog_posts テーブルで、その人を一意の ID で参照します。この ID は外部キーと呼ばれ、people テーブルと blog_posts テーブルの間の関係は、同じ人が複数のブログ投稿を作成できるため、1 対多の関係と呼ばれます。

これに加えて、各ブログ投稿にタグを添付する機能も提供したいと考えています。ブログ投稿には複数のタグを付けることができるため、これは 1 対多の関係になります。これを行うには、blog_post_tags のような名前を付けられる別のテーブルを作成する必要があります。テーブルには 2 つの外部キーが含まれます。1 つはブログ投稿の ID 用、もう 1 つはブログ投稿に関連付けられたタグの ID 用です。このようにして、ブログ投稿に任意の数のタグを割り当てることができ、単純な MySQL クエリを使用してすべての投稿にわたってその特定のタグに関する情報を編集できます。もちろん、実際のタグを保持し、id と name の 2 つのフィールドを持つ tags テーブルも必要です。

データベース構造の概要がわかったので、作成に進みましょう。 PhpMyAdmin は最も広く使用されている MySQL 管理クライアントであり、使いやすいため、これを使用します。データベース、テーブル、フィールド名を作成するときに使用できる命名規則がいくつかあります。私はスペースの代わりにすべて小文字とアンダースコアを使用することを好みます。大文字の使用はベスト プラクティスの 1 つであるため、使用しないでください。

PHP と MySQL がシステム上にない場合、またはそれらを実行できるサーバーがない場合は、Apache、PHP、および MySQL のスタンドアロン インストールをダウンロードすることをお勧めします。 MAMP は Mac 用、WAMP は PC 用です。

データベースとテーブルを作成する

このセクションでは、ブログ サイトに必要なデータベースとテーブルを作成していきます。

次に、code_tutsplus_blog という名前の新しいデータベースを作成しましょう。 PhpMyAdmin または MySQL CLI で次の MySQL コマンドを使用して、新しいデータベースを作成できます。 リーリー

データベースを作成した後、引き続き必要なテーブルを作成できます。

blog_posts テーブルを作成します

次のコマンドの実行を続けて、

blog_posts テーブルを作成します。 リーリー

blog_posts テーブルには、idtitlepostauthor_id、## の 5 つのフィールドがあります。 #投稿日

id

フィールドを主キーとして作成し、自動インクリメントするように設定しました。各エントリに一意の識別子が生成されます。新しい投稿を追加するたびに、1 から始まり、後続の投稿ごとに増加するシーケンス番号が割り当てられます。 次に、各フィールドのデータ型も定義する必要があります。

id

フィールドは数値のみを格納する必要があるため、タイプ INT (整数の略) に設定され、最大長は 11 に設定されます。 title フィールドは VARCHAR 型として定義され、最大長は 255 です。 post フィールドは TEXT タイプとして定義されます。 author_id フィールドのデータ型は、id フィールドと同じです。最後に、date_posted フィールドは DATE 型として定義されます。 <h3 id="toc-999s-create-a-people-table">创建 <code>people

让我们继续创建下一个表,名为 people。我们不称其为作者,因为将来我们可能希望创建注册和发表评论的功能,而这些人不会被视为作者。

继续运行以下命令来创建 people 表。

CREATE TABLE people (
  id INT PRIMARY KEY AUTO_INCREMENT,
  first_name VARCHAR(255),
  last_name VARCHAR(255),
  url VARCHAR(255),
  email VARCHAR(255)
);

id字段定义为INT,设置为主键,并配置为自增,类似于blog_posts表中的id字段。 first_namelast_nameurlemail字段设置为VARCHAR,最大长度为255。

创建 tags

继续运行以下命令来创建 tags 表。

CREATE TABLE tags (
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(255)
);

和之前一样,id字段定义为INT,设置为主键,并配置为自增。 name 字段定义为 VARCHAR,最大长度为 255。

创建 blog_post_tags

继续运行以下命令来创建 blog_post_tags 表。

CREATE TABLE blog_post_tags (
  blog_post_id INT,
  tag_id INT
);

两个字段都定义为 INT 类型。

这就是创建数据库和表的过程。从下一节开始,我们将开始使用 PHP 实现我们的博客网站。

对象如何在 PHP OOP 中工作

在本节中,我们将简要讨论 PHP 中的 OOP。

面向对象的编程(通常称为 OOP)是一种帮助您以易于长期扩展和维护的方式开发复杂应用程序的方法。在 OOP 的世界中,现实世界的实体(例如 PersonCarAnimal)被视为对象。在面向对象的编程中,您通过使用对象与应用程序交互。这与过程式编程形成鲜明对比,在过程式编程中,您主要与函数和全局变量交互。

在 OOP 中,有的概念,它用于将现实世界的实体建模或映射到数据(属性)和功能(方法)。 对象是类的实例,您可以创建同一类的多个实例。例如,有一个 Person 类,但许多 person 对象可以是该类的实例 — dan, zainab, hector

该类定义属性。例如,对于 Person 类,我们可能有 nameagephoneNumber。然后,每个 person 对象都会有自己的这些属性值。

您还可以在类中定义方法,以允许您操纵对象属性的值并对对象执行操作。例如,您可以定义 save 方法,将对象信息保存到数据库中。

在深入研究 PHP 代码之前,我们需要建立文件和文件夹结构。在本教程中,我们将在根文件夹中创建一个 index.php 文件。此外,我们将创建一个 includes 文件夹来存储 CSS 样式表、JavaScript 文件、connection.php 文件和 blogpost.php 文件。

创建 BlogPost

在本节中,我们将创建 BlogPost 类,它是我们博客应用程序的支柱。

继续并在 includes 文件夹中创建包含以下内容的 blogpost.php 文件。

<?php
class BlogPost 
{
    private $conn;

    public function __construct($conn) 
    {
        $this->conn = $conn;
    }

    public function getBlogPosts() 
    {
        $query = "SELECT blog_posts.id, blog_posts.title, blog_posts.post, people.first_name, people.last_name, blog_posts.date_posted
                  FROM blog_posts
                  INNER JOIN people ON blog_posts.author_id = people.id";

        $result = $this->conn->query($query);
        $blogPosts = $result->fetch_all(MYSQLI_ASSOC);

        return $blogPosts;
    }

    public function getTagsForBlogPost($blogPostId)
    {
        $query = "SELECT tags.name
                  FROM tags
                  INNER JOIN blog_post_tags ON tags.id = blog_post_tags.tag_id
                  WHERE blog_post_tags.blog_post_id = ?";

        $stmt = $this->conn->prepare($query);
        $stmt->bind_param('i', $blogPostId);
        $stmt->execute();

        $result = $stmt->get_result();
        $tags = [];
        while ($row = $result->fetch_assoc()) {
            $tags[] = $row['name'];
        }

        return $tags;
    }

    public function getBlogPostById($blogPostId) 
    {
        $query = "SELECT blog_posts.id, blog_posts.title, blog_posts.post, people.first_name, people.last_name, blog_posts.date_posted
                  FROM blog_posts
                  INNER JOIN people ON blog_posts.author_id = people.id
                  WHERE blog_posts.id = ?";

        $stmt = $this->conn->prepare($query);
        $stmt->bind_param('i', $blogPostId);
        $stmt->execute();

        $result = $stmt->get_result();
        $blogPost = $result->fetch_assoc();

        return $blogPost;
    }
}
?>

在本课程中,我们将使用 mysqli 扩展来连接 MySQL 数据库,稍后我们将看到该扩展。构造函数需要一个 mysqli 连接对象。 __construct 方法称为构造函数,每当我们创建 BlogPost 对象的新实例时,都会自动调用它。接下来,我们为不同的目的定义了一些方法。

getBlogPosts 方法从 blog_posts 表中检索所有博客文章,加入 people 表以检索作者信息。

getTagsForBlogPost 方法检索与特定博客文章关联的标签,使用准备好的语句和参数绑定来防止 SQL 注入。

最后,getBlogPostById 方法允许您通过 ID 检索特定博客文章。它使用附加的 WHERE 子句扩展了现有的 blog_postspeople 表连接查询,以根据提供的 $blogPostId 过滤结果。

因此,我们创建了 BlogPost 类,我们可以使用它从数据库中检索博客文章并显示它,这就是我们下一节的内容。

显示博客文章

设置数据库连接

继续并在 includes 文件夹中创建包含以下内容的 connection.php 文件。

<?php
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$database = "your_database";


$conn = new mysqli($servername, $username, $password, $database);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

localhostyour_usernameyour_passwordyour_database 替换为您的实际数据库凭据。它建立与 MySQL 服务器的连接并将其存储在 $conn 对象中。

创建 index.php 文件

继续创建包含以下内容的 index.php 文件。

<?php
require "includes/connection.php";
require "includes/blogpost.php";

$objBlogPost = new BlogPost($conn);
$arrPosts = $objBlogPost->getBlogPosts();
?>
<div id="main">
    <h1>My Simple Blog</h1>
    <div id="blogPosts">
        <?php
            if (count($arrPosts)) {
                foreach ($arrPosts as $post) {
                    $tags = implode(",", $objBlogPost->getTagsForBlogPost($post['id']));

                    echo "<div class='post'>";
                    echo "<h1>" . $post['title'] . "</h1>";
                    echo "<p>" . $post['post'] . "</h1>";
                    echo "<span class='footer'>Posted By: " . $post['first_name'] . " Posted On: " . $post['date_posted'] . " Tags: " . $tags . "</span>";
                    echo "</div>";
                }
            }
        ?>
	</div>
</div>

首先,我们使用 require 语句添加两个必需的文件,connection.phpblogpost.php

然后,我们通过传递 $conn 对象(数据库连接)作为参数来创建 BlogPost 类的实例。它允许我们使用 BlogPost 类中定义的方法与博客文章数据进行交互。

接下来,我们使用了 BlogPost 类的 getBlogPosts 方法,该方法从数据库中获取博客文章并将其作为关联数组返回。

最后,我们使用 foreach 构造迭代数组记录,并通过使用 XHTML 格式化记录来显示记录。

这就是如何在 BlogPost 类的帮助下构建列表页面。

以上がPHP を使用してオブジェクト指向ブログを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。