Я хочу написать класс автозагрузчика для использования в плагине wordpress. Этот плагин будет установлен на нескольких сайтах, и я хочу свести к минимуму вероятность конфликтов с другими плагинами.
Автозагрузчик будет выглядеть примерно так:
function __autoload($name) { //some code here }
Моя основная проблема: что произойдет, если другой класс также использует такую функцию? Я думаю, что это будет связано с проблемами. Какой был бы лучший способ избежать чего-то подобного?
Я пытаюсь не использовать пространства имен, поэтому код будет работать и с предыдущими версиями php.
Используйте некоторую реализацию, подобную этой.
function TR_Autoloader($className) { $assetList = array( get_stylesheet_directory() . '/vendor/log4php/Logger.php', // added to fix woocommerce wp_email class not found issue WP_PLUGIN_DIR . '/woocommerce/includes/libraries/class-emogrifier.php' // add more paths if needed. ); // normalized classes first. $path = get_stylesheet_directory() . '/classes/class-'; $fullPath = $path . $className . '.php'; if (file_exists($fullPath)) { include_once $fullPath; } if (class_exists($className)) { return; } else { // read the rest of the asset locations. foreach ($assetList as $currentAsset) { if (is_dir($currentAsset)) { foreach (new DirectoryIterator($currentAsset) as $currentFile) { if (!($currentFile->isDot() || ($currentFile->getExtension() <> "php"))) require_once $currentAsset . $currentFile->getFilename(); } } elseif (is_file($currentAsset)) { require_once $currentAsset; } } } } spl_autoload_register('TR_Autoloader');
В основном этот автозагрузчик зарегистрирован и имеет следующие функции:
Теперь, если вы хотите сделать это с помощью OOP, просто добавьте функцию автозагрузки внутри класса. (т. е. myAutoloaderClass) и вызывать его из конструктора. затем просто добавьте одну строку внутри своих функций. php
new myAutoloaderClass();
и добавить в конструктор
function __construct{ spl_autoload_register('TR_Autoloader' , array($this,'TR_Autoloader')); }
Надеюсь это поможет. HR
Я рекомендую использовать пространства имен и PSR-4. Вы можете просто скопировать этот пример автозагрузчика из фиг .
Но если вы этого не хотите, вы можете использовать автозагрузчик, подобный этому , который определяет соглашение для имен классов WP и использует это для поиска файла класса.
Так, например, если вы вызываете «Основной» класс, то этот автозагрузчик будет пытаться включить файл класса из пути:
<plugin-path>/class-main.php