Это уже некоторое время подталкивает меня, и я не могу понять это.
Мой phpinfo сообщает, что PDO установлен, и я могу подключиться к моей базе данных в моем файле index.php. Но когда я пытаюсь открыть PDO-соединение в классе с именами, php пытается использовать мою функцию автозагрузки, чтобы найти PDO.php, который не будет работать.
Мой класс выглядит следующим образом:
abstract class { protected $DB; public function __construct() { try { $this->DB = new PDO("mysql:host=$host;port=$port;dbname=$dbname", $user, $pass); } catch(PDOException $e) { echo $e->getMessage(); } } }
И ошибка
Warning: require_once((...)/Model/PDO.php): failed to open stream: No such file or directory in /(...)/Autoloader.php Fatal error: require_once(): Failed opening required 'vendor/Model/PDO.php' (include_path='.:/Applications/MAMP/bin/php/php5.4.4/lib/php') in /(...)/Autoloader.php
Насколько мне известно, автозагрузчик должен быть вызван, потому что расширение PHP PDO установлено (да, я полностью уверен).
Моя автозагрузка выглядит следующим образом:
spl_autoload_register('apiv2Autoload'); /** * Autoloader * * @param string $classname name of class to load * * @return boolean */ function apiv2Autoload($classname) { if (false !== strpos($classname, '.')) { // this was a filename, don't bother exit; } if (preg_match('/[a-zA-Z]+Controller$/', $classname)) { include __DIR__ . '/../controllers/' . $classname . '.php'; return true; } elseif (preg_match('/[a-zA-Z]+Mapper$/', $classname)) { include __DIR__ . '/../models/' . $classname . '.php'; return true; } elseif (preg_match('/[a-zA-Z]+Model$/', $classname)) { include __DIR__ . '/../models/' . $classname . '.php'; return true; } elseif (preg_match('/[a-zA-Z]+View$/', $classname)) { include __DIR__ . '/../views/' . $classname . '.php'; return true; } }
Любая помощь, пожалуйста?
Это не проблема автозагрузки. Вы пытаетесь вызвать класс в корневом пространстве имен.
По его мнению, вы находитесь в каком-то пространстве имен Model и вызываете PDO, вы должны помнить, что пространства имен по умолчанию относительны.
Вы хотите либо вызвать абсолютный путь:
\PDO
или в верхней части файла укажите, что вы собираетесь использовать PDO следующим образом:
use PDO;