当我使用匿名函数时(但另请参阅下面的注释),例如:
$f = function() use ($out) {
echo $out;
};
它会在 PHP 版本早于以下版本的服务器上产生解析错误5.3.0
。
我的软件需要兼容未知的服务器,但同时,我也想使用新的功能,所以我想我会添加某种版本检查,
if (o99_php_good() != true){
$f = function() use ($out) {
echo $out;
};
}
哪里的o99_php_good()
简直就是
function o99_php_good(){
// $ver= ( strnatcmp( phpversion(),'5.3.0' ) >= 0 )? true:false;
$ver= ( version_compare(PHP_VERSION, '5.3.0') >= 0 )? true:false;
return $ver;
}
但仍然产生错误。
有没有办法以某种方式“隔离”这部分代码?
我想过做一个有条件的include()
基于版本检查,这可能会起作用,但是每次我需要使用函数时都创建一个单独的文件是荒谬的......
有什么创造性的(或琐碎的)解决方案吗?
Note :这里的示例只是一个 Lambda 函数,但问题可能发生在每个其他函数中,这是一个新功能和/或某些服务器可能不支持..
Edit I评论后。
添加“最低要求”列表总是好的,但这并不能解决问题。
如果不想失去用户(并非所有客户都满意,或者每次我更新新功能时都可以升级他们的服务器),它只会迫使我将我的软件“分叉”成 2 个(或可能更多)难以管理的版本。
我遇到了完全相同的问题并使用 eval 函数解决了它:
if (version_compare(PHP_VERSION, '5.3.0') >= 0) {
eval('
function osort(&$array, $prop)
{
usort($array, function($a, $b) use ($prop) {
return $a->$prop > $b->$prop ? 1 : -1;
});
}
');
} else {
// something else...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)