我使用PHP 5.3,来自JS和Python的土地,不能使用call()因为< PHP 5.4
所以,让我说我有一个函数发生器,例如记录JS土地的事情:
function console($meth){
return function() use($meth) {
print "<script>console.".$meth.".apply(console,".json_encode(func_get_args()).")</script>";
};
}
我想动态评估这个,例如:
console($meth)($thing1,$thing2);
BUT
//console('log')('hello'); //syntax error!
悲伤的眼泪!但是,这很有效。
$func = console('log');
$func('hello');
为什么是这种情况? WHYWHYWHY?
另外,如何在不使用console('log')
或分配变量的情况下强制eval
进行评估?
答案 0 :(得分:0)
这将从PHP 5.3开始:
Pattern.compile("(\\D+(\\d+)\\D+)(\\D+(\\d+)\\D+)");
如果您需要链接呼叫,这将适用于所有PHP 5版本:
function console($a) {
return function($b, $c) {
echo $b, $c;
};
}
$f = console("a");
$f("b", "c");
我建议在最近的版本中开始学习PHP。 PHP开发人员在5.4及后续版本中添加了许多很酷的东西。
答案 1 :(得分:0)
另一种解决方法如下:
class App_Console {
private static $methods = array(
'log',
'info',
'warn',
'dir',
'time',
'timeEnd',
'trace',
'error',
'assert'
);
function __call($name,$args){
if(in_array($name,self::$methods)){
printf("<script>console.$name.apply(console,%s)</script>\n",json_encode($args));
}
}
}