Я был занят, пытаясь создать свою собственную платформу (чтобы стать более опытным в этой области), и наткнулся на ошибку, которую я не мог исправить, выполнив поиск в Google … вау …
Я хочу получить данные из базы данных, помещенной в объект / класс. Я делал это раньше, другим способом, которым я учился в школе, но я хотел настроить его и сделать его более динамичным, чтобы я мог использовать его в своей структуре.
Проблема, с которой я столкнулся, заключается в следующем:
SQLSTATE[HY000]: General error: could not call class constructor on line 96
Это функция в моем классе базы данных:
public function getObject($query, $classRootPath)
{
try {
//Check if slashes are double already and make them if not
if(!strpos($classRootPath, "\\\\")) {
$classRootPath = str_replace("\\","\\\\",$classRootPath);
}
$statement = $this->pdo->prepare($query);
$statement->execute(\PDO::FETCH_CLASS, "Campers\\Camper"); // I want this path to be $classRootPath once it is working with this dummy data
return $statement->fetchAll();
// return $this->pdo->query($query)->fetchAll(\PDO::FETCH_CLASS, "Campers\\Camper");
} catch (\PDOException $e) {
throw new \Exception("DB receive object failed: " . $e->getMessage());
}
}
Эта функция вложена в Database
и класс называется Database
/ Database.php
Следующий класс вложен в Campers
и называется Camper.php
class Camper {
public $ID, $date, $camperID;
public function __construct($ID, $date, $camperID)
{
$this->ID = $ID;
$this->date = $date;
$this->camperID = $camperID;
}
}
Единственная причина, по которой я могу думать, что это не работает, это то, что звонок "Campers\\Camper"
звонит сверху Database
, но я не знаю, как избежать этого. Я пробовал с ..\
но я получил ошибки назад, и это самое близкое, что я могу получить. Здесь он может найти класс, но не может найти конструктор Camper
…
Я проверил, работает ли мой класс / соединение БД, так что это не ошибка.
Структура моей таблицы соответствует моей Campers
конструктор класса.
От PSR-4 spec:
Имя завершающего класса соответствует имени файла, оканчивающемуся на .php. Имя файла ДОЛЖНО совпадать с регистром имени завершающего класса.
Вы, вероятно, не можете создать экземпляр этого Camper
класс как есть в любом случае. PSR-4 ожидает, что ваше имя файла соответствует классу. Он должен быть расположен в framework/Campers/Camper.php
,
Эта ошибка подразумевает, что более чем не удалось вызвать конструктор, она также используется для указания того, что произошла ошибка при ее вызове.
В моем случае, исключение было брошено внутри конструктора. Если вы не распечатываете / не регистрируете трассировку стека, вы можете легко пропустить ее.
Наслаждайтесь!
🙂