Wenn ich spl_autoload_register in meinem Plugin verwende, erhalte ich:
Fatal error: Uncaught exception 'LogicException' with message
'Class wp_atom_server could not be loaded'
wp-includes\pluggable-deprecated.php on line 182
Ich habe etwas gelesen und verschiedene Korrekturen gefunden. Einer auf SO sagte, spl_autoload_register nicht mit WordPress zu verwenden.
Ist das richtig?
Ich bin sicher, dass ich eine "Lösung" für den Fehler finden kann, aber ich bin nicht sicher, ob ich das mit jeder WP-Version tun möchte.
Wie soll ich meine Klassen laden, wenn ich die Autoload-Funktion nicht verwende? Folgendes bricht jetzt zusammen:
spl_autoload_extensions(".php");
spl_autoload_register();
use MyPluginClasses\Student as MS;
$student = new MS\Student();
echo $student->sayHello();
Im Schüler:
<?PHP
namespace MyPluginClasses\Student
{
class Student{
public function __Construct(){
echo "Hello Johnny";
}
public function sayHello(){
echo "Hello Johnny's Method";
}
}
}
Dieses Design funktioniert gut außerhalb von WordPress.
php
plugin-development
errors
Johnny
quelle
quelle
spl_autoload_register()
ohne negative Nebenwirkungen verwenden.glob()
einmal in das Verzeichnis zu gehen und dann die Klassen zu liefern, wenn sie pro benötigt werdenspl_autoload_register()
.Antworten:
Ich bin mir wirklich nicht sicher, ob es eine gute oder schlechte Praxis ist, Klassen im WP-Plugin automatisch zu laden. Für mich sehe ich keine Nebenwirkungen bei der Verwendung
spl_autoload_register
(nicht getestete Leistung)Um Ihre Frage zu beantworten, möchte ich eine Klasse aus meinem kommenden Plugin freigeben, mit der ich Klassen ohne Probleme automatisch aus einem einzelnen Verzeichnis lade, und das tut mir bisher gut.
Um diese einfache Klasse in Teile zu zerlegen, wie Sie sehen, verwende ich Singleton-Muster.
Constructor
ist privat undinstance()
&$_instance
gehört zum Muster. Konstruktor hatspl_autoload_register
Funktion.Das ruft die
load
Methode aus der Selbstklasse auf. Die ersten beiden Zeilen dieser Methode lauten:das ist ziemlich gerade. wenn Sie folgen WPCS es fordert Sie dazu auf, eine Klasse Namenskonvention zu folgen mit Wort Präfix Klasse und dann Klassennamen. Natürlich wird jeder Unterstrich (_) durch einen (-) Bindestrich ersetzt.
so ein Dateiname der Klasse
WPSE_Post
wäreclass-wpse-post.php
Namen der unteren Gehäuseklassen mit
strtolower
und verwendenstr_replace
, um Unterstriche durch Bindestriche zu ersetzen. so wirdWPSE_Post
jetztwpse-post
. Endlich ein Präfixclass-
in der nächsten Zeile hinzufügen .Ich verwende
is_readable
in bedingten Anweisung, die mit austauschbar istfile_exists
. Angenommen, derYOUR_PLUGIN_PATH
Basispfad des Pluginsclasses-dir
befindet sich im Haupt-Plugin-Verzeichnis und enthält alle Klassen, die automatisch geladen werden müssen.include_once
wird verwendet, um die eigentliche Datei beim Aufruf zu laden.Verwendung:
Sie müssen nur die obige Auto Loader-Klasse in die Basisdatei Ihres Plugins aufnehmen
und rufen Sie dann Ihre Klassen auf Anfrage an.
Hinweis: Ich verwende in meiner Lösung keine Namespace-Methode, sodass sie möglicherweise Ihren Anforderungen entspricht oder nicht, aber hier veröffentlicht in der Hoffnung, dass zumindest jemand die Vorteile des dynamischen Ladens von Klassen erhält.
quelle
quelle