Je continue d'essayer de savoir quel est le problème avec ce script de chargeur de classe très simple. Le chargeur de classe ressemble à ceci:spl_autoload_register charge la classe deux fois
#src/vendors/Autoloading/lib/ClassLoader.php
namespace App\Vendors\Autoloading;
class ClassLoader
{
private $path;
function __construct($path)
{
$this->path = $path;
}
public function load($class)
{
if(file_exists( $class = str_replace(array('\\', '_'), DIRECTORY_SEPARATOR, $this->path) . '.php')){
require $class;
return true;
}
}
public function register()
{
return spl_autoload_register([$this, 'load']);
}
}
Le chargeur de classe initiale avait plus des méthodes et des fonctions pour valider les noms de fichiers ... mais, dans le processus de débogage je devais à cette étroite. Par conséquent, ce chargeur de classe est requis dans un fichier autoload.php
, comme vous pouvez le voir ci-dessous.
#src/vendors/autoload.php
namespace App\Vendors;
require 'Autoloading/lib/ClassLoader.php';
$autoload = new Autoloading\ClassLoader('path/Foo/FooClass');
$autoload->register();
Le FooClass.php
est situé dans src/Foo/FooClass.php
namespace App\Foo;
class FooClass{}
et il n'y a en réalité aucun problème avec la partie autoloading, la classe se charge très bien, mais il est fait deux fois qui me montre le dessous Erreur. Je l'appelle à partir d'un fichier index.php
<?php
use \App\Foo\FooClass;
FooClass::somefunction();
Juste en utilisant qui génère cette erreur.
Fatal error: Cannot redeclare class path\foo\FooClass in /path/to/index.php on line 4
Merci, mais je reçois toujours la même erreur. Je dois faire quelque chose de mal. Pouvez-vous me montrer comment vous instanciez au moins le classLoader? –
Qu'avez-vous changé? "Still" implique que vous avez changé quelque chose, et que "still" ne fonctionne pas. Vous êtes censé UTILISER la variable $ class, ajouter le chemin, convertir le nom de classe en un autre chemin, ajouter ".php" à la fin, et exiger ce fichier s'il existe. Ne changez pas $ class, créez un nouveau nom de fichier $. – Sven
J'ai fait ceux qui me font confiance. Je ne suis pas à la traîne, j'ai juste passé des heures à essayer de comprendre cela. Je reçois le fichier 'can not redeclare class' –