Когда я использую spl_autoload_register в моем плагине, я получаю:
Fatal error: Uncaught exception 'LogicException' with message
'Class wp_atom_server could not be loaded'
wp-includes\pluggable-deprecated.php on line 182
Я немного почитал и нашел различные исправления. Один на SO сказал не использовать spl_autoload_register с WordPress.
Это точно?
Я уверен, что смогу найти «исправление» для ошибки, но я не уверен, что хочу делать это с каждым выпуском WP.
Если я не использую функцию автозагрузки, как мне загружать свои классы? Вот что ломается сейчас:
spl_autoload_extensions(".php");
spl_autoload_register();
use MyPluginClasses\Student as MS;
$student = new MS\Student();
echo $student->sayHello();
У студента:
<?PHP
namespace MyPluginClasses\Student
{
class Student{
public function __Construct(){
echo "Hello Johnny";
}
public function sayHello(){
echo "Hello Johnny's Method";
}
}
}
Этот дизайн прекрасно работает вне WordPress.
php
plugin-development
errors
Джонни
источник
источник
spl_autoload_register()
без негативных побочных эффектов.glob()
в каталог один раз, а затем доставить классы, когда они необходимыspl_autoload_register()
.Ответы:
Я действительно не уверен, хорошо ли это или плохо делать автоматическую загрузку классов в плагине WP. Для меня я не вижу никаких побочных эффектов использования
spl_autoload_register
(не проверенная производительность)Поэтому, чтобы ответить на ваш вопрос, я хотел бы поделиться с классом из моего предстоящего плагина, который я использую для автоматической загрузки классов из одного каталога без каких-либо проблем, и это пока хорошо для меня.
Чтобы разбить этот простой класс на части, как вы видите, я использую шаблон Singleton.
Constructor
является приватным иinstance()
&$_instance
относится к образцу. Конструктор имеетspl_autoload_register
функцию.который вызывает
load
метод из собственного класса. Первые две строки этого метода:что довольно прямо. если вы следуете WPCS, это побуждает вас следовать соглашению об именах классов с префиксом word class и затем class name. Конечно, любое подчеркивание (_) заменяется на (-) тире.
поэтому имя файла класса
WPSE_Post
будетclass-wpse-post.php
Имена классов в нижнем регистре с
strtolower
и используютstr_replace
для замены подчеркивания тире. такWPSE_Post
теперь и становитсяwpse-post
. наконец добавив префиксclass-
на следующей строке.Я использую
is_readable
в условном заявлении, которое можно обменять сfile_exists
. предполагая,YOUR_PLUGIN_PATH
что это базовый путь плагина иclasses-dir
находится в директории основного плагина, содержащей все ваши классы, которые требуют автозагрузки.include_once
используется для загрузки актуального файла по вызову.Использование:
вам просто нужно включить вышеупомянутый класс автозагрузчика в базовый файл вашего плагина
а затем позвоните в ваши классы по требованию.
Примечание. Я не использую метод пространства имен в своем решении, поэтому он может подходить или не соответствовать вашим потребностям, но размещен здесь в надежде, что кто-то хотя бы получит преимущества от загрузки классов динамически.
источник
источник