У меня есть эта проблема, что у меня много огромных функций, и я использую только несколько в данном скрипте. Каждая функция находится в собственном файле. Было бы неплохо иметь возможность «автозагрузить» или, скорее, require_once файл, если данная функция не существует.
Возможно, есть способ переопределить Fatal error: Call to undefined function...
в начале скрипта, поэтому каждый раз, когда эта ошибка запускается, скрипт сначала попытается потребовать имя файла с именем несуществующей функции, а затем попробуйте снова вызвать функцию.
Начиная с php 5.3.0, вы можете сделать что-то вроде:
class Funcs { public function __callStatic($name, $args) { if (!function_exists($name)) { require_once sprintf( 'funcs/%s.func.php', // generate the correct path here $name ); } if (function_exists($name)) { return call_user_func_array($name, $args); } else { // throw some error } } }
И затем используйте его как (например):
Funcs::helloworld();
Который попытался бы загрузить файл в funcs/helloworld.func.php
и выполнить helloworld
после успешной загрузки.
Таким образом, вы можете опустить повторные встроенные тесты.
function_exists
и код может быть таким
if ( !function_exists('SOME_FUNCTION')) { include(.....) }
Если вы используете скрипты без ООП, вы можете использовать функцию функции:
if(!function_exists('YOUR_FUNCTION_NAME')){ //include the file require_once('function.header.file.php'); }
// Теперь позвоните в cuntion
// Ссылка: http://php.net/manual/en/function.function-exists.php
если вы используете классы, например. ООП. чем вы можете использовать метод __autoload :
function __autoload($YOUR_CUSTOM_CLASS){ include $YOUR_CUSTOM_CLASS.'class.php'; }
// Теперь вы можете использовать классы, которые НЕ были включены в текущий файл.
// Ссылка: http://php.net/manual/en/language.oop5.autoload.php
function_exists будут делать лучше
Я думаю, вы могли бы попытаться написать некоторую обработку ошибок, которая включает функции function_exists, но проблема заключается в том, когда правильно загрузить функцию?
Рассматривали ли вы возможность интегрировать свои функции в классы, чтобы вы могли использовать http://uk.php.net/autoload ?
Неопределенные ошибки функции являются фатальными ошибками для PHP. Таким образом, нет способа справиться с фатальными ошибками (кроме таких хаков, как register_shutdown_function ). Лучше думать о способе ООП и использовать классы с __autoload .
function_exists не поможет вам поймать несуществующие функции «на лету». Вместо этого вам придется окружать все вызовы функций if (! Function_exists ()). Насколько я знаю, вы можете захватывать не существующие вызовы «на лету» с помощью классов, используя реализации _autoload . Может быть, было бы целесообразно поместить ваш код в классы или поместить связанный набор функций в один файл и, таким образом, сохранить ряд проверок для функций-функций?