我正在分发一个PHP库。 我正在使用一个需要命名空间的可选组件。 如果库的用户没有 PHP>= 5.3.0 的版本,我想不包括该功能:
类似于以下内容(并且不起作用):
public static function validVisualCaptcha( $formId = NULL, $type = NULL, $fieldName = NULL, $accessibilityFieldName = NULL ) {
$php_version = phpversion();
if ($php_version >= '5.3.0') {
require_once('visualCaptcha/inc/visualcaptcha.class.php');
$visualCaptcha = new 'visualCaptcha'Captcha( $formId, $type, $fieldName, $accessibilityFieldName );
//^^^^^ That Line causes a fatal error if PHP is earlier than 5.3.0
return $visualCaptcha->isValid();
}
else
return true;
}
我是否应该将该实例化放在其自己的文件中并有条件地包含该文件? 这似乎不那么优雅。 C++我会使用预处理器...我在PHP中找不到这样的东西。
绕过
它(并且它仍然是有效的 PHP 5.3 代码)的唯一方法是将代码移动到有条件加载的include()
,或者将条件代码放在eval()
调用中。
后者是"邪恶的",但在这里可以正常工作:
if ($php_version >= '5.3.0') {
require_once('visualCaptcha/inc/visualcaptcha.class.php');
$visualCaptcha = eval('return new ''visualCaptcha''Captcha( '$formId, '$type, '$fieldName, '$accessibilityFieldName );');
return $visualCaptcha->isValid();
}