PHP - 强制功能评估?

时间:2015-05-20 19:04:33

标签: php function metaprogramming

我使用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进行评估?

2 个答案:

答案 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));
            }
        }
    }