Я пытаюсь найти лучший прагматичный подход к импорту функций на лету … позвольте мне объяснить.
Скажем, у меня есть каталог, называемый функциями, который имеет эти файлы:
array_select.func.php stat_mediam.func.php stat_mean.func.php .....
Я хотел бы: загрузить каждый отдельный файл (который имеет функцию, определенную внутри) и использовать его точно так же, как внутренняя функция php .., например array_pop (), array_shift () и т. Д.
Как только я наткнулся на учебник (который я больше не могу найти сейчас), который скомпилировал определенные пользователем функции как часть установки PHP. Хотя это не очень хорошее решение, потому что на хосте общего / реселлера вы не можете перекомпилировать установку PHP ,
Я не хочу иметь конфликты с будущими версиями PHP / других расширений, т. Е. Если функция, именуемая мной X, внезапно становится частью внутренних функций php (хотя она может и не иметь одинаковой функциональности как таковой) я хочу, чтобы PHP выбросил фатальную ошибку из-за этого и терпел неудачу.
Поэтому лучший способ, который я могу придумать, – проверить, определена ли функция, используя функцию_exists (), если это бросить уведомление, чтобы его легко отслеживать в файлах журнала, иначе определите функцию. Однако это, вероятно, переведёт на то, что у меня есть много операторов include / require в других файлах, где мне нужна такая функция, которая мне не очень нравится. Или, возможно, прочитайте каталог и зациклируйте на каждый файл * .func.php и include_once. Хотя я считаю это немного уродливым.
Вопрос в том, вы когда-нибудь натыкались на какой-то исходный код, который обрабатывал такой случай? Как это было реализовано? Вы когда-нибудь делали что-то подобное? Мне нужно как можно больше идей! 🙂
Один из способов вытащить что-то подобное – это включить эти функции в классы, а затем настроить функцию __autoload . Если вы против упаковки функций в классах, то это решение, вероятно, не применимо к вам. Лично мне это нравится, потому что он позволяет мне использовать свои функции и распространять частные методы между ними.
Сначала вы настроили свою функцию автозагрузки, подобную этой. Вы хотите настроить соглашение об именах в соответствии с вашим собственным стилем и, вероятно, ввести некоторую обработку ошибок, но это просто для того, чтобы получить основную идею.
function __autoload($class_name){ require_once(strtolower("library/$class_name.class.php")); }
Тогда в любом месте вашего кода, независимо от области действия, вы можете сделать что-то подобное.
arrayFunctions::doStuff($myArray);
PHP автоматически попытается включить «library / arrayFunctions.class.php» и искать метод, называемый «doStuff» в классе arrayFunctions.
У меня проблемы с этой идеей. Нажатие файловой системы для включения одной функции очень дорого в том смысле, что она снижает ваши максимальные возможные запросы в секунду.
Как правило, намного лучше загружать / разбирать пять функций в одном файле (статический класс?) И использовать только два из них (один стат-вызов), а не загружать два файла для двух функций (два вызова статистики).
Что явно становится еще хуже, когда вам нужны все пять функций.