Rumah >pembangunan bahagian belakang >tutorial php >Cara membuat blog berorientasikan objek menggunakan PHP

Cara membuat blog berorientasikan objek menggunakan PHP

WBOY
WBOYasal
2023-08-30 19:21:091370semak imbas

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

Dalam artikel ini, kami akan meluaskan lagi pengetahuan kami tentang PHP dan MySQL dengan mencipta blog yang ringkas. Walaupun terdapat banyak platform blog percuma yang sangat baik di pasaran, tujuan tutorial ini adalah untuk meneroka proses mencipta laman web blog untuk mempelajari teknik struktur pangkalan data lanjutan dan cara menggunakan data dengan lebih cekap menggunakan pengaturcaraan berorientasikan objek dalam PHP.

Untuk tutorial ini, saya menganggap anda mempunyai pemahaman asas tentang PHP, MySQL dan XHTML.

Semak imbas struktur pangkalan data

Sebelum kita pergi ke klien MySQL dan mula membuat jadual, kita harus menyenaraikan apa yang kita mahu dalam blog. Perkara yang jelas yang perlu kami sertakan ialah catatan blog, setiap catatan harus mengandungi tajuk, siaran itu sendiri, pengarang, dan tarikh ia diterbitkan.

Kini, kami hanya mencipta jadual untuk menyimpan maklumat ini dan kemungkinan besar berjaya mencipta blog asas. Walau bagaimanapun, jika terdapat hanya satu jadual, kami tidak mempunyai banyak kawalan ke atas data. Sebagai contoh, kita boleh menyimpan nama pengarang dalam jadual yang sama dengan catatan blog, tetapi bagaimana jika kita juga mahu menyimpan e-mel pengarang? Menambah medan lain pada jadual kami akan menjadi penyelesaian yang jelas.

Masalah timbul apabila anda kemudiannya ingin menukar alamat e-mel pengarang tersebut. Sekarang, anda perlu menukarnya untuk setiap catatan blog yang dibuat oleh orang itu.

Jadi apa yang kita mahu lakukan ialah mencipta jadual berasingan yang dipanggil orang di mana kita boleh menyimpan semua maklumat tentang pengarang seperti e-mel, URL, nama dan ID unik. Kemudian, dalam jadual blog_posts kami, kami akan merujuk orang itu dengan ID unik mereka. ID ini dipanggil kunci asing dan hubungan antara jadual orang dan jadual blog_posts dipanggil hubungan satu-ke-banyak kerana orang yang sama boleh membuat berbilang blog jawatan. people 的单独表,其中可以存储有关作者的所有信息,例如电子邮件、URL、姓名和唯一 ID。然后,在我们的 blog_posts 表中,我们将通过该人的唯一 ID 来引用该人。该 ID 称为外键,people 表和 blog_posts 表之间的关系称为一对多关系,因为同一个人可以创建多个博客帖子。

除此之外,我们还希望提供为每篇博客文章附加标签的功能。一篇博客文章可以附加多个标签,因此这是一种一对多的关系。为此,我们需要创建另一个表,其名称可以类似于 blog_post_tags。该表将包含两个外键:一个用于博客文章的 ID,另一个用于与博客文章关联的标签的 ID。通过这种方式,我们可以为博客文章分配任意数量的标签,并且仍然能够使用简单的 MySQL 查询在所有帖子中编辑有关该特定标签的信息。当然,我们还需要 tags 表,它保存实际的标签,它有两个字段:id 和 name。

现在我们已经概述了数据库结构应该是什么样子,让我们继续创建它。我将使用 PhpMyAdmin,因为它是使用最广泛的 MySQL 管理客户端并且易于使用。创建数据库、表和字段名称时可以使用几种不同的命名约定。我喜欢使用所有小写字母和下划线来代替空格。您应该避免使用大写字符,因为这被认为是最佳实践之一。

如果您的系统或可以运行它们的服务器上没有 PHP 和 MySQL,我建议您下载 Apache、PHP 和 MySQL 的独立安装。 MAMP 适用于 Mac,WAMP 适用于 PC。

创建数据库和表

在本节中,我们将继续为我们的博客网站创建数据库和必要的表格。

让我们继续创建一个名为 code_tutsplus_blog 的新数据库。您可以使用 PhpMyAdmin 或 MySQL CLI 中的以下 MySQL 命令来创建新数据库:

CREATE DATABASE code_tutsplus_blog;

创建数据库后,我们就可以继续创建必要的表。

创建 blog_posts

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

CREATE TABLE blog_posts (
  id INT PRIMARY KEY AUTO_INCREMENT,
  title VARCHAR(255),
  post TEXT,
  author_id INT,
  date_posted DATE
);

blog_posts 表有五个字段:idtitlepostauthor_iddate_posted

我们创建了 id 字段作为主键并将其设置为自动递增。它将为每个条目生成一个唯一的标识符。每当我们添加新帖子时,它都会分配一个序列号,从 1 开始,并随着每个后续帖子的增加而递增。

接下来,我们还需要定义每个字段的数据类型。 id 字段设置为 INT (整数的缩写)类型,因为它应该只存储数值,并且我们将最大长度设置为 11。 title 字段定义为 VARCHAR 类型,最大长度为255。 post 字段定义为 TEXT 类型。 author_id 字段与 id 字段具有相同的数据类型。最后,date_posted 字段被定义为 DATE

Di samping itu, kami juga ingin menyediakan keupayaan untuk melampirkan tag pada setiap catatan blog. Siaran blog boleh mempunyai berbilang teg yang dilampirkan padanya, jadi ini adalah hubungan satu dengan banyak. Untuk melakukan ini, kita perlu mencipta jadual lain, yang boleh dinamakan sesuatu seperti blog_post_tags. Jadual akan mengandungi dua kunci asing: satu untuk ID catatan blog dan satu lagi untuk ID teg yang dikaitkan dengan catatan blog. Dengan cara ini kami boleh menetapkan sebarang bilangan teg pada catatan blog dan masih boleh mengedit maklumat tentang teg khusus itu merentas semua siaran menggunakan pertanyaan MySQL yang mudah. Sudah tentu, kami juga memerlukan jadual tag, yang menyimpan teg sebenar dan mempunyai dua medan: id dan nama. #🎜🎜# #🎜🎜#Sekarang kita mempunyai gambaran keseluruhan tentang rupa struktur pangkalan data, mari teruskan dan buatnya. Saya akan menggunakan PhpMyAdmin kerana ia adalah klien pentadbiran MySQL yang paling banyak digunakan dan mudah digunakan. Terdapat beberapa konvensyen penamaan berbeza yang boleh anda gunakan semasa membuat pangkalan data, jadual dan nama medan. Saya suka menggunakan semua huruf kecil dan garis bawah dan bukannya ruang. Anda harus mengelak daripada menggunakan aksara besar kerana ini dianggap sebagai salah satu amalan terbaik. #🎜🎜# #🎜🎜# Jika anda tidak mempunyai PHP dan MySQL pada sistem anda atau pelayan yang boleh menjalankannya, saya syorkan anda memuat turun pemasangan kendiri Apache, PHP dan MySQL. MAMP adalah untuk Mac dan WAMP adalah untuk PC. #🎜🎜#

Buat pangkalan data dan jadual#🎜🎜# #🎜🎜# Dalam bahagian ini, kami akan terus mencipta pangkalan data dan jadual yang diperlukan untuk laman web blog kami. #🎜🎜# #🎜🎜# Mari teruskan dan buat pangkalan data baharu yang dipanggil code_tutsplus_blog. Anda boleh mencipta pangkalan data baharu menggunakan arahan MySQL berikut dalam PhpMyAdmin atau MySQL CLI: #🎜🎜#
CREATE TABLE people (
  id INT PRIMARY KEY AUTO_INCREMENT,
  first_name VARCHAR(255),
  last_name VARCHAR(255),
  url VARCHAR(255),
  email VARCHAR(255)
);
#🎜🎜#Selepas mencipta pangkalan data, kami boleh meneruskan untuk mencipta jadual yang diperlukan. #🎜🎜#

Buat jadual blog_posts

#🎜🎜# Teruskan jalankan arahan berikut untuk mencipta jadual blog_posts. #🎜🎜#
CREATE TABLE tags (
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(255)
);
#🎜🎜#Jadual blog_posts mempunyai lima medan: id, title, post, author_id dan <code>date_posted. #🎜🎜# #🎜🎜#Kami mencipta medan id sebagai kunci utama dan menetapkannya kepada auto-increment. Ia akan menjana pengecam unik untuk setiap entri. Setiap kali kami menambah siaran baharu, ia diberikan nombor urutan, bermula pada 1 dan bertambah dengan setiap siaran berikutnya. #🎜🎜# #🎜🎜#Seterusnya, kita juga perlu menentukan jenis data setiap medan. Medan id ditetapkan untuk menaip INT (singkatan untuk integer) kerana medan itu hanya perlu menyimpan nilai angka dan kami menetapkan panjang maksimum kepada 11. Medan title ditakrifkan sebagai jenis VARCHAR, dengan panjang maksimum 255. Medan post ditakrifkan sebagai jenis TEXT. Medan author_id mempunyai jenis data yang sama seperti medan id. Akhir sekali, medan date_posted ditakrifkan sebagai jenis DATE. #🎜🎜#

创建 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 类的帮助下构建列表页面。

Atas ialah kandungan terperinci Cara membuat blog berorientasikan objek menggunakan PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn