Autoloader PHP | tuto POO en PHP

Par Actraiser, il y a 9 ans


Bonjour,
Je suis bloqué au chapitre 12 de la formation, je tourne en rond depuis plusieurs heures et je suis au bord du découragement.
mon arborescence est :
www/open/app/autoloader.php
www/open/public/index.php

j'ai une erreur dans mon navigateur :
Warning: require(D:\wamp64\www\open\app/.php): failed to open stream: No such file or directory in D:\wamp64\www\open\app\autoloader.php on line 23

Voilà mon index.php

<?php require '../app/autoloader.php'; App\Autoloader::register(); if (isset($_GET['p'])){ $p = $_GET['p']; } else { $p = 'home'; } // INITIALISATION DES OBJETS : $db = new App\Database('xxxxxxxx'); ob_start(); // Permet de mettre dans la variable content la page à afficher pour ne pas avoir à réécrire les head ... if ($p === 'home'){ require '../pages/home.php'; } elseif ($p === 'single'){ require '../pages/single.php'; } $content = ob_get_clean(); require '../pages/template/default.php'; ?>

Et mon autoloader.php

<?php namespace App; /** * Class Autoloader */ class Autoloader{ /** * Enregistre notre autoloader */ static function register(){ spl_autoload_register(array(__CLASS__, 'autoload')); } /** * Inclue le fichier correspondant à notre classe * @param $class string Le nom de la classe à charger */ static function autoload($class){ if (strpos($class, __NAMESPACE__.'\\') === 0){ $class = str_replace(__NAMESPACE__, '\\', '', $class); $class = str_replace('\\', '/', $class); require __DIR__ . '/' . $class . '.php'; } } } ?>

Avez-vous une idée ?

5 réponses

Laznet, il y a 8 ans

Je ne sais pas si l'auteur suis encore ce topic, mais remplace 0 par null à cette ligne :

if (strpos($class, __NAMESPACE__.'\\') === 0){
Huggy, il y a 8 ans

la ligne suivante me parait suspecte

$class = str_replace(__NAMESPACE__, '\\', '', $class);

le 4em argument est censé être un count mais là il y a $class !!!

GrCOTE7, il y a 8 ans

Oui, sans doute:

$class = str_replace(__NAMESPACE__.'\\', '', $class);

( . au lieu de , )

;-)...

serval154, il y a 8 ans

Salut

remplace : $class = str_replace(NAMESPACE, '\', '', $class); par

$class = str_replace(NAMESPACE . '\', '', $class);

Après NAMESPACE tu as mis une virgule lieu d'un point.

Alain

serval154, il y a 8 ans

N'oublie pas les doubles '\'
$class = str_replace(NAMESPACE . '\'\, '', $class);