Функции автозагрузки в php

Можно ли автозагрузить функции?

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

5 ответов

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

abstract class Util
{
    static function doSomething() {

    }
}

Использование:

Util::doSomething();

Использование:

include("path");

или же

require_once("path");

Рекомендации:

http://php.net/manual/en/function.include.php

http://php.net/manual/en/function.require-once.php

Нет, но вы можете загрузить классы. с помощью __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" (где * - имя функции), то вы можете использовать приведенный выше код непосредственно как есть. Тем не менее, вы должны поместить этот код в каждый файл, в который вы хотите автоматически загружать функции и адаптировать путь.

Это немного грязно, но это работает. Я надеюсь, что мой код поможет вам.

Другие вопросы по тегам