文件,面向对象PHP中的类结构


Files & Classes structure in OOP PHP

我也是OOP和PHP的新手,我一直在阅读教程和书籍来掌握它的窍门。现在我正在做一个个人项目(没有教程或书本练习),我有一个关于如何组织我的类和文件的问题。

我有一个database.php文件,我创建我的连接与我的数据库,并在我的类的__construct函数我调用它,像这样:

<?php
include 'database.php';
class users {
// Database Connection
public function __construct() {
  $db = new database();
}
// the rest of my functions
?>

我的问题是,在我做的教程和练习中,只有一个类。目前在我的项目中,我有3类(用户,电影和watchlists),他们都有一个。php文件(用户。php,电影。php和watchlists.php)

在我的项目的某些页面上,我需要从所有3类的数据,所以我开始这些页面像这样:

<?php
session_start();
include 'include/users.php';
include 'include/movies.php';
include 'include/watchlists.php';
$user = new users();
$movie = new movies();
$watchlist = new watchlists();
// the rest of the file

现在,对我来说很明显,当你有多个类时,这不是正确的方式,因为我连续三次创建数据库连接。

那么我如何管理我的类,数据库连接和。php文件正确工作时,像我的项目?

你不必解释整个事情,如果你能把我链接到一些关于这方面的好文章/教程,我将不胜感激。(是的,我已经谷歌过了,但没有找到任何有用的)。

谢谢

如果您遵循以下简单的步骤,您将不会连续三次连接到数据库。

代替

include 'database.php'

include_once 'database.php'

,并像这样编写连接代码

if(!$con) {
    $con = mysqli_connect(HOST, USER, PASS);
}

您要查看的是PSR-0标准https://gist.github.com/Thinkscape/1234504

大多数现成的自动装填机在此标准下最容易工作。

在大多数PHP编码标准中,"类文件"应该包含的唯一内容是类定义。这意味着没有include s和require s。那么如何允许一个类访问另一个类呢?

半自动的!去读一读关于自动加载的知识,简单的解释是,你在一个单独的文件中定义了一个自动加载器(就是你实际使用这些类的那个文件),你调用的任何类,以及这些类所需要的任何类,PHP都会自动进入并获取。自动加载是伟大的,不仅因为你不必麻烦地输入include语句,而且因为只有你实际使用的类被获取-所以它更有效。

另一点需要说明的是,将所有的类保存在它们自己的文件夹中,然后在文件夹之外实际使用中的那些类,这通常是一个好主意。同样,这只是一种惯例,但它也使实现自动加载更容易一些。