Lorsque j'utilise spl_autoload_register dans mon plugin, j'obtiens:
Fatal error: Uncaught exception 'LogicException' with message
'Class wp_atom_server could not be loaded'
wp-includes\pluggable-deprecated.php on line 182
J'ai fait quelques lectures et trouvé diverses corrections. Un sur SO a dit de ne pas utiliser spl_autoload_register avec WordPress.
Est-ce exact?
Je suis sûr que je peux trouver un "correctif" pour l'erreur, mais je ne suis pas sûr de vouloir le faire avec chaque version de WP.
Si je n'utilise pas la fonction de chargement automatique, comment dois-je charger mes classes? Voici ce qui se casse maintenant:
spl_autoload_extensions(".php");
spl_autoload_register();
use MyPluginClasses\Student as MS;
$student = new MS\Student();
echo $student->sayHello();
En étudiant:
<?PHP
namespace MyPluginClasses\Student
{
class Student{
public function __Construct(){
echo "Hello Johnny";
}
public function sayHello(){
echo "Hello Johnny's Method";
}
}
}
Cette conception fonctionne bien en dehors de WordPress.
php
plugin-development
errors
johnny
la source
la source
spl_autoload_register()
sans effets secondaires négatifs.glob()
accéder au répertoire une fois, puis à livrer les classes quand elles sont nécessairesspl_autoload_register()
.Réponses:
Je ne sais vraiment pas si c'est une bonne ou une mauvaise pratique de charger automatiquement des classes dans le plugin WP. Pour moi, je ne vois aucun effet secondaire de l'utilisation
spl_autoload_register
(performances non testées)Donc, pour répondre à votre question, je voudrais partager une classe de mon prochain plugin que j'utilise pour charger automatiquement les classes à partir d'un seul répertoire sans aucun problème et cela me convient jusqu'à présent.
Pour briser cette classe simple en plusieurs parties comme vous le voyez, j'utilise le modèle Singleton.
Constructor
est privé etinstance()
et$_instance
appartient au modèle. Le constructeur a unespl_autoload_register
fonction.qui appelle la
load
méthode de l'auto-classe. Les deux premières lignes de cette méthode sont:ce qui est assez simple. si vous suivez WPCS, il vous encourage à suivre une convention de dénomination de classe précédée du mot classe et du nom de classe. bien entendu, tout trait de soulignement (_) est remplacé par un tiret (-).
donc un nom de fichier de classe
WPSE_Post
seraitclass-wpse-post.php
Diminuez les noms de classe de casse avec
strtolower
et en utilisantstr_replace
pour remplacer les tirets bas par des tirets. doncWPSE_Post
devient maintenantwpse-post
. enfin ajouter un préfixeclass-
sur la ligne suivante.j'utilise
is_readable
dans une déclaration conditionnelle qui est échangeable avecfile_exists
. en supposant queYOUR_PLUGIN_PATH
le chemin de base du pluginclasses-dir
est sous le répertoire principal du plugin contenant toutes vos classes qui nécessitent un chargement automatique.include_once
est utilisé pour charger le fichier réel sur appel.Usage:
il vous suffit d'inclure la classe de chargeur automatique ci-dessus dans le fichier de base de votre plugin
puis appelez vos cours sur demande.
Remarque: Je n'utilise pas la méthode namespace dans ma solution, elle peut donc ou non correspondre à vos besoins, mais publiée ici dans l'espoir que quelqu'un profite au moins des avantages du chargement dynamique des classes.
la source
la source