Есть у меня скрипт который хорошо работал пока я не начал его редактировать) писал я его по принципу MVC, решил наладить в нем пространство имен, прописал везде namespace, начал переделывать вызовы классов и дошел до класса DB
/*
Класс для подключения к БД
Можно использовать в любом месте движка
$db = DB::me();
*/
namespace Core;
abstract class DB
{
static protected
$host,
$user,
$password,
$db_name,
$_instance;
protected function __construct(){}
protected function __clone(){}
/*
* Получаем данные от БД
*/
private static function getParametersBd(){
return include_once(DIR_CONFIG . '/db.php');
}
/**
* @return PDO
* @throws ExceptionPdoNotExists
* @throws Exception
*/
static public function me(){
if(!class_exists('pdo') || array_search('mysql', PDO::getAvailableDrivers()) === false)
die("Отсутствует драйвер PDO");
$args = self::getParametersBd();
self::$host = $args['host'];
self::$db_name = $args['db_name'];
self::$user = $args['user'];
self::$password = $args['password'];
if(!self::$_instance){
if(!self::$db_name || !self::$user || !self::$host)
die('Укажите параметры соединения');
$dsn = 'mysql:host=' . self::$host . ';dbname=' . self::$db_name . ';charset=utf8';
$opt = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
self::$_instance = new PDO($dsn, self::$user, self::$password, $opt);
}
return self::$_instance;
}
}
Файлы с классами подключаю так
spl_autoload_register(function ($name) {
$name = H . '/' . str_replace('\\', '/', $name) . '.php';
//echo $name . '<br />';
if (is_file($name)){
require_once $name;
}else{
echo 'Не найден: ' . $name . '<br />';
}
/*
$dirs = ['/Core/', '/Models/', '/More/', '/Controllers/'];
for($i = 0; $i < count($dirs); $i++){
$path = H . $dirs[$i] . $name . '.php';
if(is_file($path)){
require_once $path;
}
}
*/
});
В результате получаю ошибку
Не найден: /var/www/zadanie.loc/Core/PDO.php
Fatal error: Uncaught Error: Class 'Core\PDO' not found in /var/www/zadanie.loc/Core/DB.php:33 Stack trace: #0 /var/www/zadanie.loc/Models/User.php(35): Core\DB::me() #1 /var/www/zadanie.loc/Models/User.php(21): Models\User->getData() #2 /var/www/zadanie.loc/System/inc/start.php(44): Models\User->__construct(0) #3 /var/www/zadanie.loc/Controllers/MainController.php(6): User() #4 [internal function]: Controllers\MainController->actionIndex() #5 /var/www/zadanie.loc/Core/Router.php(50): call_user_func_array(Array, Array) #6 /var/www/zadanie.loc/index.php(8): Core\Router->run() #7 {main} thrown in /var/www/zadanie.loc/Core/DB.php on line 33
Он хочет подключить PDO как \Core\PDO как это поправить?
Хотел создать свой класс в папке Core и унаследовать его от класса PDO) но номер не прокатил и пишет ошибку мол класса PDO нету(