php version_compare() 在本地主机上失败,在服务器上运行

php version_compare() fails on localhost, runs on server

这个条件代码执行 if 语句就在 php 手册中:

// version_compare ( string $version1 , string $version2 [, string $operator ] )
// http://php.net/manual/en/function.version-compare.php
if (version_compare(PHP_VERSION, '5.3.0') >= 0)
{
    //echo 'I am at least PHP version 5.3.0, my version: ' . PHP_VERSION . "\n";
    include_once( DOMAIN_PATH . "sitewide/functions/make_comparer.php" );
    usort($market_and_volume, make_comparer(['exchange_volume', SORT_DESC], ['exchange', SORT_DESC]));   
}

以上代码在生产服务器上运行没有错误。在 localhost php 版本 5.2.9-2 上,理论上无法使 version_compare() 函数抛出错误:

解析错误:解析错误,在第 61 行 test.php 中应为 `')''

通常我可能不在乎,因为它 运行 在 5.4.39 生产服务器上,但是我计划在几乎每个本地主机页面上使用这个代码段,因为它现在会阻碍未来的发展。

有什么想法吗?

问题是您使用的是 shorthand 数组表示法。 [...]。不幸的是,这仅在 PHP 5.4.0 及更高版本中受支持。尽管 "bad" 代码永远不会 运行 它无法编译,因此会抛出错误。

这可以通过像这样使用 array(...) 符号来解决。

// version_compare ( string $version1 , string $version2 [, string $operator ] )
// http://php.net/manual/en/function.version-compare.php
if (version_compare(PHP_VERSION, '5.3.0') >= 0)
{
    //echo 'I am at least PHP version 5.3.0, my version: ' . PHP_VERSION . "\n";
    include_once( DOMAIN_PATH . "sitewide/functions/make_comparer.php" );
    usort($market_and_volume, make_comparer(array('exchange_volume', SORT_DESC), array('exchange', SORT_DESC)));   
}

参考:http://php.net/manual/en/language.types.array.php