Функции автозагрузки в php
Можно ли автозагрузить функции?
У меня есть написанные функции, распределенные по разным файлам, названным по имени функции, поэтому мне нужно автоматически загрузить файл, содержащий функцию. Есть какой-либо способ сделать это?
5 ответов
Вы можете автоматически загружать классы, поэтому, если вы сделаете ваши функции статическими методами классов, это сработает.
abstract class Util
{
static function doSomething() {
}
}
Использование:
Util::doSomething();
Использование:
include("path");
или же
require_once("path");
Рекомендации:
Нет, но вы можете загрузить классы. с помощью __autoload($className)
Хотя это не разумно, это возможно.
Вы можете сохранить эти функции в файле и добавить этот файл ко всем запрашиваемым скриптам:
- шаблон фронт-контроллера (один центральный файл для всех запросов, включите его туда)
- php's auto_prepend_file
Но мудрое, ООП решение было бы сгруппировать эти функции в классы и использовать __autoload
или какой-то фреймворк автозагрузчик вроде Zend_Autloader
чтобы ускорить процесс и загрузить только те функции, которые вам нужны.
Не напрямую. Но вы можете добавить следующий код в начало вашего кода, чтобы автоматически включать функции:
call_user_func(function($p,$w){$c=file_get_contents(__FILE__);$fs=explode('(',$c);$f=[];for($i=65;$i<=90;$i++){$vc[chr($i)]=1;$vc[chr($i+32)]=1;if($i<75)$vc[chr($i-17)]=1;}$vc['_']=1;foreach($fs as $fn){$fn=rtrim($fn);for($i=strlen($fn)-1;$i>=0;$i--){if(!isset($vc[$fn[$i]])){$f[]=substr($fn,$i+1);break;}}}foreach($f as $c){@include_once($p.$w[0].$c.$w[1]);}},
"func_dir/",["func_",".php"]);
Единственное, что вам нужно изменить - это вторая строка: первый параметр - это папка, в которой нужно искать файлы, второй параметр - это массив, который оборачивает оба значения вокруг имени функции.
Например: если ваши файлы функций находятся в подкаталоге "func_dir/" и имеют имя "func_*. Php" (где * - имя функции), то вы можете использовать приведенный выше код непосредственно как есть. Тем не менее, вы должны поместить этот код в каждый файл, в который вы хотите автоматически загружать функции и адаптировать путь.
Это немного грязно, но это работает. Я надеюсь, что мой код поможет вам.