Я уверен, что это было задано несколько раз, но я не могу найти прямой или хорошо объясненный ответ. Я пытаюсь создать объект / класс учетной записи в PHP, где я могу получить данные из учетной записи. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу включить свой класс database.php, чтобы получить все созданные учетные записи.
Я довольно новичок в PHP и не располагаю обширными знаниями о том, как работают многие процессы или соглашения. Ошибка / предупреждение, с которым я столкнулся, – это;
Предупреждение: include (../ database.php): не удалось открыть поток: нет такого файла или каталога в ~ / account.php в строке 3
Вот мой класс 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 incase Я сделал что-то неправильно или, возможно, должен изменить ситуацию
<?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; }
Структура каталога:
Вы можете использовать include (dirname(__FILE__)."/../database.php")
для доступа к файлу database.php в файле account.php
В настоящее время у вас есть сочетание объектно-ориентированного и процедурного кода.
Добавление функций базы данных в класс обычно выполняется путем инъекции зависимостей. Другими словами, вы передаете объект базы данных в качестве аргумента независимо от того, какой метод нуждается в ней, и используйте тип, намекающий для его применения, например:
public static function getUser(MyConnectionClassOrInterface $db, $username) { }
Что касается вашего включения, вы используете относительные пути, которые относятся к основному сценарию , а не к текущему файлу. Вы можете создавать абсолютные пути или использовать более сложный автозагрузчик классов.