2012-04-28 6 views
1

У меня есть функция в одном из моих PHP-скриптов, которые полагаются на версию 5.3 для запуска.Можно ли переключиться на PHP на основе версии?

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

Если я могу избежать этого, я бы не хотел иметь ветку разных версий моих скриптов, посвященных различным версиям PHP. Вместо этого было бы идеально иметь возможность иметь код, который гласит: «Если PHP версии 5.3, то делайте это, если меньше, то делайте что-то другое».

Я искал какой-то «переключатель версии» в руководстве по PHP, но не видел его.

Является ли функция переключения, как я описываю, возможной?

ответ

3

Существует множество способов решить эту проблему. Я предпочитаю определять версию и выполнять функцию.

  1. Существует функция называется phpversion() или постоянной PHP_VERSION, что дает вам текущую версию PHP

    Используйте их как

    if(phpversion() == '5.3') { 
        //specific php functions 
    } 
    
  2. Чтобы проверить, если текущая версия новее или равно позволяет скажем «5.3.2». просто использовать:

    if (strnatcmp(phpversion(),'5.3.2') >= 0) { 
        # equal or newer 
    } 
    else { 
        # not 
    } 
    
  3. Или используйте version_compare знать

    if (version_compare(PHP_VERSION, '5.3.0') >= 0) { 
        echo 'I am at least PHP version 5.3.0, my version: ' . PHP_VERSION . "\n"; 
    } 
    

Или еще более удобной для пользователей версии использовать function_exists()

if (!function_exists('function_name')) { 
    // the PHP version is not sufficient 
} 
+0

Как насчет ['version_compare'] (http://us.php.net/manual/en/function.version-compare.php)? – DCoder

+0

@DCoder, Забыл об этом .. обновлен;) – Starx

+1

Существует также 'PHP_VERSION_ID' в PHP 5.2.7+, который проще в использовании, чем' PHP_VERSION' для простых сравнений. например. 'if (PHP_VERSION_ID> = 50300)'. Ссылка: http://php.net/phpversion#example-536 – MrWhite

1

Имейте отдельный файл кода с кодом PHP 5.3+ и только include() его, если вы обнаружите 5.3 или больше.

+0

Благодарим за отзыв, но я специально сказал в вопросе, что не хочу разветвлять разные версии моего сценария. Я уже знаю, что могу создать отдельный файл кода, но я ищу решение в коде, если я могу его получить. – Questioner

0

Посмотрите на PHP predefined constants. Они включают несколько констант, которые определяют текущую версию. Вы можете использовать это, чтобы решить, какую версию сценария загрузить.

0

Вы можете посмотреть на реализацию PHP 5.3+, если они не существуют.

if (!function_exists('array_replace')) { 
    function array_replace(....) { 
     // logic here 
    } 
} 

Если вы должны обнаружить версию, вы можете использовать PHP_VERSION.

Смежные вопросы