>  기사  >  백엔드 개발  >  PHP를 사용하여 객체 지향 블로그를 만드는 방법

PHP를 사용하여 객체 지향 블로그를 만드는 방법

WBOY
WBOY원래의
2023-08-30 19:21:091242검색

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

이 기사에서는 간단한 블로그를 만들어 PHP와 MySQL에 대한 지식을 더욱 확장할 것입니다. 시중에는 수많은 훌륭한 무료 블로그 플랫폼이 있지만, 이 튜토리얼의 목적은 고급 데이터베이스 구조 기술과 PHP의 객체 지향 프로그래밍을 사용하여 데이터를 보다 효율적으로 사용하는 방법을 배우기 위해 블로그 웹사이트를 만드는 과정을 탐색하는 것입니다.

이 튜토리얼에서는 귀하가 PHP, MySQL 및 XHTML에 대한 기본 지식을 가지고 있다고 가정합니다.

데이터베이스 구조 탐색

MySQL 클라이언트로 이동하여 테이블 생성을 시작하기 전에 블로그에서 원하는 내용을 간략하게 설명해야 합니다. 우리가 포함해야 할 분명한 것은 블로그 게시물입니다. 각 게시물에는 제목, 게시물 자체, 작성자 및 게시 날짜가 포함되어야 합니다.

이제 이 정보를 담을 테이블을 생성하면 기본 블로그가 성공적으로 생성될 가능성이 높습니다. 그러나 테이블이 하나만 있는 경우 데이터에 대한 제어 권한이 많지 않습니다. 예를 들어 작성자의 이름을 블로그 게시물과 동일한 테이블에 저장할 수 있지만 작성자의 이메일도 저장하고 싶다면 어떻게 해야 할까요? 테이블에 다른 필드를 추가하는 것이 확실한 해결책이 될 것입니다.

나중에 작성자의 이메일 주소를 변경하려고 할 때 문제가 발생합니다. 이제 그 사람이 만드는 모든 블로그 게시물에 대해 이를 변경해야 합니다.

그래서 우리가 할 일은 people 的单独表,其中可以存储有关作者的所有信息,例如电子邮件、URL、姓名和唯一 ID。然后,在我们的 blog_posts 表中,我们将通过该人的唯一 ID 来引用该人。该 ID 称为外键,people 表和 blog_posts이라는 관계를 만드는 것입니다. 테이블 간의 관계는 같은 사람이 여러 개의 블로그 게시물을 만들 수 있기 때문에 일대다 관계라고 합니다.

이 외에도 각 블로그 게시물에 태그를 첨부하는 기능도 제공하고자 합니다. 블로그 게시물에는 여러 개의 태그가 첨부될 수 있으므로 이는 일대다 관계입니다. 이렇게 하려면 이름이 blog_post_tags。该表将包含两个外键:一个用于博客文章的 ID,另一个用于与博客文章关联的标签的 ID。通过这种方式,我们可以为博客文章分配任意数量的标签,并且仍然能够使用简单的 MySQL 查询在所有帖子中编辑有关该特定标签的信息。当然,我们还需要 tags table과 같을 수 있고 실제 태그를 보유하며 id와 name이라는 두 개의 필드가 있는 또 다른 테이블을 만들어야 합니다.

이제 데이터베이스 구조의 개요를 살펴보았으니 계속해서 만들어 보겠습니다. PhpMyAdmin은 가장 널리 사용되는 MySQL 관리 클라이언트이고 사용하기 쉽기 때문에 사용하겠습니다. 데이터베이스, 테이블 및 필드 이름을 만들 때 사용할 수 있는 여러 가지 명명 규칙이 있습니다. 나는 공백 대신 소문자와 밑줄을 모두 사용하는 것을 좋아합니다. 대문자는 모범 사례 중 하나로 간주되므로 사용을 피해야 합니다.

시스템이나 이를 실행할 수 있는 서버에 PHP 및 MySQL이 없는 경우 Apache, PHP 및 MySQL의 독립 실행형 설치를 다운로드하는 것이 좋습니다. MAMP는 Mac용이고 WAMP는 PC용입니다.

데이터베이스 및 테이블 만들기

이 섹션에서는 블로그 웹사이트에 필요한 데이터베이스와 테이블을 계속해서 생성하겠습니다.

계속해서 code_tutsplus_blog라는 새 데이터베이스를 만들어 보겠습니다. PhpMyAdmin 또는 MySQL CLI에서 다음 MySQL 명령을 사용하여 새 데이터베이스를 생성할 수 있습니다.

으아아아

데이터베이스를 생성한 후 필요한 테이블 생성을 진행할 수 있습니다.

만들기 blog_posts 테이블

다음 명령을 실행하여 blog_posts 테이블을 생성하세요.

으아아아

blog_posts 表有五个字段:idtitlepostauthor_iddate_posted 테이블에는

, title, post, author_iddate_posted의 5개 필드가 있습니다.

id

필드를 기본 키로 생성하고 자동 증가로 설정했습니다. 각 항목에 대한 고유 식별자를 생성합니다. 새 게시물을 추가할 때마다 1부터 시작하여 후속 게시물이 나올 때마다 증가하는 일련 번호가 할당됩니다.

id 字段设置为 INT (整数的缩写)类型,因为它应该只存储数值,并且我们将最大长度设置为 11。 title 字段定义为 VARCHAR 类型,最大长度为255。 post 字段定义为 TEXT 类型。 author_id 字段与 id 字段具有相同的数据类型。最后,date_posted 字段被定义为 DATE다음으로 각 필드의 데이터 유형도 정의해야 합니다.

필드는 숫자 값만 저장해야 하므로 INT(정수의 약어) 유형으로 설정되었으며 최대 길이는 11로 설정되었습니다. title 필드는 VARCHAR 유형으로 정의되며 최대 길이는 255자입니다. post 필드는 TEXT 유형으로 정의됩니다. author_id 필드는 🎜 필드와 동일한 데이터 유형을 갖습니다. 마지막으로 date_posted 필드는 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 类的帮助下构建列表页面。

위 내용은 PHP를 사용하여 객체 지향 블로그를 만드는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.