在 PHP class 中包含另一个文件
Include another file in PHP class
我确定这个问题已经被问过几次了,但我似乎找不到一个直接的或解释清楚的答案。我正在尝试在 PHP 中创建一个帐户 Object/Class,我可以从帐户中检索数据。我遇到的问题是我无法包含我的 database.php class 以便我可以检索所有已创建的帐户。
我对 PHP 还很陌生,对许多流程或约定的工作原理并不了解。 error/warning 我 运行 喜欢的是这个;
Warning: include(../database.php): failed to open stream: No such file
or directory in ~/account.php on line 3
这是我的account.phpclass
<?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;
}
目录结构:
您目前混合使用了面向对象代码和过程代码。
向 class 添加数据库功能通常是通过依赖注入来完成的。换句话说,您将数据库对象作为参数传递给任何需要它的方法,并使用类型提示来强制执行它,例如:
public static function getUser(MyConnectionClassOrInterface $db, $username) {
}
关于您的包含,您使用的是相对路径,这些路径是相对于主脚本,而不是当前文件。您可以构建绝对路径或使用更精细的 class 自动加载器。
您可以使用include (dirname(__FILE__)."/../database.php")
访问account.php文件中的database.php文件
我确定这个问题已经被问过几次了,但我似乎找不到一个直接的或解释清楚的答案。我正在尝试在 PHP 中创建一个帐户 Object/Class,我可以从帐户中检索数据。我遇到的问题是我无法包含我的 database.php class 以便我可以检索所有已创建的帐户。
我对 PHP 还很陌生,对许多流程或约定的工作原理并不了解。 error/warning 我 运行 喜欢的是这个;
Warning: include(../database.php): failed to open stream: No such file or directory in ~/account.php on line 3
这是我的account.phpclass
<?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;
}
目录结构:
您目前混合使用了面向对象代码和过程代码。
向 class 添加数据库功能通常是通过依赖注入来完成的。换句话说,您将数据库对象作为参数传递给任何需要它的方法,并使用类型提示来强制执行它,例如:
public static function getUser(MyConnectionClassOrInterface $db, $username) {
}
关于您的包含,您使用的是相对路径,这些路径是相对于主脚本,而不是当前文件。您可以构建绝对路径或使用更精细的 class 自动加载器。
您可以使用include (dirname(__FILE__)."/../database.php")
访问account.php文件中的database.php文件