J'essaie de refactoriser mon code et d'utiliser le système de chargement automatique. Pour l'instant, je fais:Charger automatiquement le fichier de classe avec l'espace de noms
index.php:
namespace example_com;
use example_com\Core\Application;
require 'Application.php';
$app = new Application();
$app->MyCustomFunction();
Je voudrais éliminer ligne require; Je voudrais exiger à chaque fois que j'appelle new Application() ou new Class();
J'essaie comme ci-dessous:
index.php
namespace example_com;
use example_com\Core\Application;
spl_autoload_register(function($className) {
$namespace = str_replace("\\", "/", __NAMESPACE__);
$className = str_replace("\\", "/", $className);
$class = ROOT . (empty($namespace) ? "" : $namespace . "/") . "{$className}.php";
include_once($class);
});
//require 'Application.php';//remove this
$app = new Application();
$app->MyCustomFunction();
application.php
namespace example_com\Core;
class Application
{
//..contruct, properties, functions
}
= DEBUG outout =
spl_autoload_register(function($className) { //$className: "example_com/Core/Application"
$namespace = str_replace("\\", "/", __NAMESPACE__); //$namespace: "example_com"
$className = str_replace("\\", "/", $className);
$class = ROOT . (empty($namespace) ? "" : $namespace . "/") . "{$className}.php"; //$className: "example_com/Core/Application" $namespace: "example_com" $class: "example_com/example_com/Core/Application.php"
Je prévois d'utiliser ceci dans différents fichiers dans le s projet amme
MISE À JOUR 1: Structure des dossiers
App/
--Controllers/
----XController.php
----YController.php
Core/
--Controllers/
----IBaseController.php
----BaseController.php
--Application.php
index.php
Toutes vos classes se trouvent-elles dans le même dossier de base? Je pense que vous devriez avoir toutes vos classes dans le même dossier afin que vous puissiez faire un 'spl_autoload_register()' qui se chargerait en haut de votre page (peut-être dans un fichier de configuration inclus) et couvrirait toutes vos classes à travers votre application? Je ne pense pas que je ferais un autochargeur sur une base par classe. Cela peut ralentir votre application un peu. – Rasclatt
Toutes mes classes ne sont pas dans le même dossier. J'édite un sujet qui montre ma structure de dossiers – reladawrefurhost