Возникли проблемы с автозагрузкой и пространством имен, может кто-нибудь заметить, что меня беспокоит?

Я учу php / mysql в данный момент, и я застрял после учебника.
Это про Autoloding и пространства имен.

Мой код выглядит так: я буду сортировать файлы по их именам.

Folders :
mysite/
app/
Autoloader.php
Database.php
pages/
home.php
single.php
Template/
default.php
public/
index.php

Мой код:
/public/Index.php =================================================

    <?php
require '../app/Autoloader.php';
App\Autoloader::register();
if (isset($_GET['p'])) {
$p = $_GET['p'];
} else {
$p = 'home';
}
ob_start();
if ($p === 'home') {
require '../pages/home.php';
} elseif ($p === 'single') {
require '../pages/single.php';
}
$content = ob_get_clean();
require '../pages/template/default.php';

/app/Autoloader.php ================================================= ====

<?php
namespace App;
class Autoloader
{
static function register()
{
spl_autoload_register(array(__CLASS__, 'autoload'));
}
static function autoload($class_name)
{
if (strpos(__NAMESPACE__, '\\') === 0) {
$class = str_replace(__NAMESPACE__, '\\', '', $class);
$class = str_replace('\\', '', $class);
require __DIR__.'/'.$class_name.'.php';
}
}
}

/app/Database.php ================================================= ==

<?php
namespace App;
use \PDO;

class Database
{
private $db_name;
private $db_user;
private $db_pass;
private $db_host;

private $pdo;

public function __construct($db_name, $db_user = 'root', $db_pass = 'password', $db_host = 'localhost')
{
$this->db_name = $db_name;
$this->db_pass = $db_pass;
$this->db_user = $db_user;
$this->db_host = $db_host;
}
private function getPDO()
{
$pdo = new PDO('mysql:dbname=blog;host=localhost', 'root', 'password');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->pdo = $pdo;

return $pdo;
}

public function query($statement)
{
$req = $this->getPDO()->query($statement);

$datas = $req->fetchAll(PDO::FETCH_OBJ);

return $datas;
}
}

МОЕ сообщение об ошибке:

Неустранимая ошибка: класс ‘App \ Database’ не найден в C: \ wamp \ www \ блоге Johan’s \ pages \ home.php в строке 3

Так что я полагаю, что в автозагрузчике он не может требовать Database.php.
Но я не вижу, куда я иду, что-то не так.
Я не понимаю, что такое пространство имен.

Если у кого есть подсказка?

Заранее спасибо 🙂
Хорошего дня !

0

Решение

По вашей ошибке мы видим, что ваша страница C:\wamp\www\Johan's Blog\pages\home.php пытается использовать класс ‘App \ Database’.

Я думаю, что проблема в том, что ваш путь к пространству имен здесь относительный, ища из класса, расположенного по тому же пути. Вы должны попытаться использовать его с абсолютным путем, \App\Database вместо App\Database,

Чтобы хорошо понять, как используются пространства имен и как это работает, вы должны сделать простые сценарии, чтобы научить себя, как это действительно работает, потому что это важная вещь для понимания. Попробуй прочитать несколько уроков, чувак, удачи тебе в этом :)!

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru