Так что моя цель прямо сейчас, чтобы обнаружить пользователя PHP версии (не проблема), а затем запустить, если еще на его основеВыполнить Условный Использование PHP Version
Так что, если я пишу что-то вроде этого:
if (PHP => 5.3){
// call a function anonymously
}
else {
// if user does not have 5.3, this else block disables the feature.
}
Проблема, с которой я сталкиваюсь, заключается в том, что я хочу использовать анонимные функции PHP, если у пользователя есть 5.3 или более поздние версии (поскольку они были введены в PHP 5.3) и альтернатива, если у них более старая версия. Проблема, конечно, в том, что если пользователь имеет PHP 5.2.17, например, что, если этот оператор if никогда не будет оцениваться как истинный, для синтаксиса будет вызываться фатальная ошибка, поскольку анонимный вызов функции выглядит как синтаксическая ошибка PHP 5.2.17
Есть ли способ сделать что-то вроде выше? Единственная работа вокруг я нашел, чтобы положить вещи в случае в новый файл, и материал в другой в другом, и сделать что-то вроде этого:
$version = '5.2';//user's current version cut to the nearest x.y, ex 5.3, 5.4, 5.5
// Remove the period here, so we have 5.2
require 'function'.$version.'.php';
Теперь это будет работать нормально, так как function53.php никогда не будет загружен для пользователя 5.2. Однако не обязательно использовать отдельные файлы.
После прочтения комментарий, чтобы quesiton Алеся в, что-то вроде этого:
if ($version > '5.3'){
// require one file
}
else{
// require another
}
не будет работать. Компилятор PHP будет запускать оба файла при проверке компиляции для синтаксических ошибок перед выполнением и выдавать ошибку, которую я пытаюсь избежать. Единственный способ работы с файловым методом - динамически выбирать файл на основе номера версии. Для этого требуется отдельный файл для каждого выпуска x.y с PHP 4 и 5. Не идеально.
По ответам Алекса, он отлично работает. Мы говорим об одной строке eval (требуется, чтобы скрыть анонимный вызов функции), по сравнению с предлагаемыми тоннами файлов.
[version_compare()] (http://php.net/manual/en/ function.version-compare.php)? –
Way, * способ * особо работа. Вы серьезно собираетесь написать * две копии * всего вашего кода, просто чтобы воспользоваться новым синтаксисом, когда старый синтаксис * отлично работает * в обеих версиях? – meagar
Вы действительно хотите дублировать код для этого? У вас должна быть * одна реализация этой функции в синтаксисе, который может обрабатывать самая младшая версия PHP, которую вы хотите поддерживать. Он будет работать так же, вы не должны переписывать его как закрытие * также * просто потому, что можете. – deceze