Функции импорта PHP

Я пытаюсь найти лучший прагматичный подход к импорту функций на лету … позвольте мне объяснить.

Скажем, у меня есть каталог, называемый функциями, который имеет эти файлы:

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. Хотя я считаю это немного уродливым.

Вопрос в том, вы когда-нибудь натыкались на какой-то исходный код, который обрабатывал такой случай? Как это было реализовано? Вы когда-нибудь делали что-то подобное? Мне нужно как можно больше идей! 🙂

Solutions Collecting From Web of "Функции импорта PHP"

Один из способов вытащить что-то подобное – это включить эти функции в классы, а затем настроить функцию __autoload . Если вы против упаковки функций в классах, то это решение, вероятно, не применимо к вам. Лично мне это нравится, потому что он позволяет мне использовать свои функции и распространять частные методы между ними.

Сначала вы настроили свою функцию автозагрузки, подобную этой. Вы хотите настроить соглашение об именах в соответствии с вашим собственным стилем и, вероятно, ввести некоторую обработку ошибок, но это просто для того, чтобы получить основную идею.

 function __autoload($class_name){ require_once(strtolower("library/$class_name.class.php")); } 

Тогда в любом месте вашего кода, независимо от области действия, вы можете сделать что-то подобное.

 arrayFunctions::doStuff($myArray); 

PHP автоматически попытается включить «library / arrayFunctions.class.php» и искать метод, называемый «doStuff» в классе arrayFunctions.

У меня проблемы с этой идеей. Нажатие файловой системы для включения одной функции очень дорого в том смысле, что она снижает ваши максимальные возможные запросы в секунду.

Как правило, намного лучше загружать / разбирать пять функций в одном файле (статический класс?) И использовать только два из них (один стат-вызов), а не загружать два файла для двух функций (два вызова статистики).

Что явно становится еще хуже, когда вам нужны все пять функций.

  1. Чтобы автоматически загружать файлы по мере необходимости, поместите свои функции в классы и используйте автозагрузку.
  2. Для конфликта имен используйте пространства имен (если у вас есть PHP 5.3).