在PHP类中包含另一个文件

时间:2016-05-30 15:04:41

标签: php include

我确定已经问了好几次,但我似乎无法找到一个直截了当或解释清楚的答案。我试图在PHP中创建一个帐户对象/类,我可以从帐户中检索数据。我遇到的问题是我不能包含我的database.php类,所以我可以检索所有创建的帐户。

我对PHP很新,并且对于许多流程或约定的工作方式并不了解广泛的知识。我遇到的错误/警告是这个;

  

警告:include(../ database.php):无法打开流:没有这样的文件   或第3行〜/ account.php中的目录

这是我的account.php类

<?php

include '../database.php';

class Account {

    protected $username, $email;

    protected function getEmail() {
        return $this->email;
    }

    protected function getUsername() {
        return $this->username;
    }

    public function __construct($username, $email) {
        $this->username = $username;
        $this->email = $email;
    }

    public static function getUser($username) {
        $statement = getConnection()->prepare('SELECT * FROM account WHERE username=?');
        $statement->bindValue(1, $username);

        if ($rows = $statement->fetch()) {
             $account = new Account($rows['username'], $rows['email']);
        }

         return $account;
    }

}

这是我的database.php,因为我做错了或者可能需要改变一些事情

<?php

function getConnection() {
    $dbh = new PDO("mysql:host=127.0.0.1;dbname=mcsl;port3306", "root", "");
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $dbh->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
    $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    return $dbh;
}

目录结构:

Directory Structure

2 个答案:

答案 0 :(得分:3)

您可以使用include (dirname(__FILE__)."/../database.php")访问account.php文件中的database.php文件

答案 1 :(得分:0)

您目前混合使用面向对象和程序代码。

通常通过依赖注入来完成向类添加数据库功能。换句话说,您将数据库对象作为参数传递给任何需要它的方法,并使用类型提示来强制执行它,例如:

public static function getUser(MyConnectionClassOrInterface $db, $username) {
}

关于您的包含,您使用的相对路径是相对于主脚本,而不是当前文件。您可以构建绝对路径或使用更精细的类自动加载器。