我有一个类来处理插件的AJAX请求。该类为所有操作都有一个\\uu callStatic包装器,它随后为每个操作调用非静态方法,如下所示:
class TP_AJAX_wrapper {
public static function __callStatic( $name, $args = null ) {
check_ajax_referer( \'tp_ajax_nonce\' );
$out = array();
try {
$res = call_user_func( array( __CLASS__, $name ) );
} catch(Exception $e) {
$out[\'error\'] = $e->getMessage();
}
$out[\'responseStatus\'] = $res ? \'ok\' : \'null\';
$out[\'response\'] = $res;
echo json_encode($out);
die();
}
protected static function someAction() {
return array( \'someValue\' => 3 );
}
}
然后,我有一系列操作,我使用以下方法初始化这些操作:
foreach ( $ajax_actions as $action ) {
add_action ( \'wp_ajax_tp_\'.$action, array( \'TP_AJAX_wrapper\', $action ) );
}
这对PHP 5.3+非常有用,但在旧版本上失败得很惨。
Warning: call\\u user\\u func\\u array()[函数.call user func array]:第一个参数应该是有效的回调,“TP\\u AJAX\\u wrapper::someAction”在中给出/path/to/wordpress/wp-includes/plugin.php 在线395
由于它是用插件编写的,可以在各种主机上使用,其中一些支持PHP 5.3,另一些不支持,因此我必须让它更灵活一些。我搞不清楚的是,有一种方法可以为旧版本的PHP模拟\\uu callStatic(在5.3中引入)。
我要寻找的是一种为旧版本模拟\\uu callStatic包装器的方法。我也尝试过使用\\uu调用,如果第一个参数是类名而不是对象,则应该使用该调用来处理静态方法调用,但我一直遇到相同的错误。
哈尔普?