Версия для предварительной проверки PHP

0

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

public static function array_flatten(Array $input){
    $return = array();
    array_walk_recursive($input, function($a) use (&$return) { $return[] = $a; });
    return $return;
}// array_flatten

В моих рамках v5.3.13 требуется PHP, по крайней мере, и тестирование Im с помощью v5.2.2
Моя проблема заключается в том, что проверка версий происходит перед всеми другими действиями. Критический код, указанный выше, находится в отдельном файле, который автоматически загружается при необходимости. В тот момент, когда я проверяю версию PHP, ничто не включало этот отдельный файл, PHP не имел к этому никакого отношения в то время, но я получил ошибку:

Ошибка анализа: синтаксическая ошибка, неожиданный T_FUNCTION в D:\Munka\wamp\www\lmvc_trunk\utils\Utils.php в строке 152

вместо этого сообщение устаревшей версии, которое я планировал распечатать. (После этого сообщения об ошибке я вызываю exit())

Поэтому возникает вопрос: почему анализируется Utils.php, когда он автозагружается, и никто не вызывает никаких его методов (поэтому его нельзя включать, поэтому не следует разбирать) перед командой exit()?

Если я прокомментирую ядро метода array_flatten, сообщение об ошибке об устаревшей версии отображается правильно.

  • 0
    Вы точно поставили свой скрипт проверки версии? Вы ДЕЙСТВИТЕЛЬНО проверяете версию, которая запускается первой? Я бы просто поместил его в самый верх вашего фронт-контроллера (вероятно, index.php), чтобы убедиться, что ничего больше не выполняется до этого.
Теги:

1 ответ

1

Если файл загружен автоматически, он должен быть немедленно разобран. Он может содержать команды, которые необходимо запустить. Если он не может быть проанализирован, PHP не может знать, каким должен быть следующий шаг.

При загрузке файла PHP не может знать, что он содержит только определения функций и пропускает их загрузку до тех пор, пока они не будут вызваны. Он должен разбирать все.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню