Article ► https://grafikart.fr/tutoriels/autoload-561
Abonnez-vous ► https://bit.ly/GrafikartSubscribe
On conseille toujours de séparer les classes dans différents fichiers. Le problème c’est que l’on est obligé ensuite de faire beaucoup de require pour charger nos différentes classes. Heureusement l’autoloading nous permet de reméditer à ce problème en incluant les classes dès que l’on en a besoin.
Soutenez Grafikart:
Devenez premium ► https://grafikart.fr/premium
Donnez…
__autoload est devenue obsolete depuis PHP 7.2.0. La doc recommande de ne plus s'en servir !
Est-ce que l'on peut créer un seul fichier 'autoloader.php' et rajouter plusieurs "function autoload($class_name)" pour charger tous les fichiers class de notre site ?
Au top 🔝 Grafikart, fan !
Bonjour, encore merci pour l'effort que tu fournis pour nous transmettre ce savoir. j'ai petit soucis dans ta logique de programmation, tu nous donnes ce code if(strpos($class,__NAMESPACE__.'\) === 0) {…} nous permet juste de charger nos propres namespaces. j'ai essayé de mettre en place un code pour charger les namspaces préférés, j'obtiens une erreur lorsque je copie l'autoloder dans le dossier Core
<?php
/**
* Created by PhpStorm.
* User: Osée Botendju
* Date: 18/01/2018
* Time: 10:44
*/
namespace Market243;
class Autoloader
{
public static function register()
{
spl_autoload_register([__CLASS__, 'autoload']);
}
public static function autoload($class)
{
$namespace_allow = ['Market243','Core'];
$namespace_checked = explode('\',$class);
if (in_array($namespace_checked[0],$namespace_allow) {
$class = str_replace($namespace_checked[0] . '\', '', $class);
$class_name = str_replace('\', '/', $class);
require _DIR_ . '/' . $class_name . '.php';
}
}
}
quand je crée ce fichier dans le dossier Core et quej'esaye de charger une class qui a le namespace Core, j'obtiens une erreur. sans oublié que j'utilise la fonction static load() créée dans le App.php pour charger les autoloaders.
Sinon tu fais :
foreach (glob('le_nom_de_ton_dossier/*') as $filename)
{
require $filename;
}
Et ça te require automatiquement tous les fichier du dossier.
À 4:52 – On peut utiliser le mot-clé "self" au lieu d'utiliser "__CLASS__ ?
Merci en tout cas pour vos vidéos !
Y'a t'il une difference sur mac et windows , car je suis obligé de modifier des truc pour que ça marche mais le hic c'est que je sais pas trop pk
Salut!
Petite question
J'ai grosso modo le même code que toi
J'ai un controller frontal qui fait un require de core/Autoloader.php cependant PHP me lève une erreur quand je met le namespace dans ma classe Autoloader.php :
"Fatal Error : Class Autoloader Not Found in .."
Si j'enlève le namespace, ma classe charge bien toutes les autres et je n'ai pas de soucis. J'aimerais comprendre alors pourquoi réagit-elle comme celà ? Pourquoi ne puis-je pas mettre ce namespace sur ma class Autoloader ?
Merci! super tuto!
Bonjour et merci beaucoup pour cette formation qui m'a permis de mieux appréhender les méthodes dîtes static.
Cela dit j'ai une petite question m'est venue. Lors de la réalisation de la class Autoloader on utilise la méthode register() pour utiliser le système d'autoloader. Ce que je me demande c'est, est ce qu'on peut mettre un constructeur en static, et donc ne pas avoir à faire un appel a une méthode.Bon sur le coup ça me parrait un peu tiré par les cheveux mais je préfère quand même demander.
Ah et autre petite question, est-ce une bonne ou mauvaise pratique de faire Autoloader::register() directement dans le fichier Autoloader.php juste après la class, ce qui nous permettrait de ne faire qu'un require dans le fichier index.php.