从字符串创建方法调用

时间:2015-05-02 21:51:14

标签: php class call

目前我正在寻找一种从String调用方法的方法。我的字符串看起来像这样:

"Hello, here's the Link you look for: [[Link,internLink,Go,Login]]."

我想将[[Link,internLink,Go,Login]]替换为:

K :: gI('Link')->internLink('Go', 'Login');

有办法吗?原因是,我在我的数据库中保存了各种文本,我需要在这些文本中调用方法。此外,只有第一个参数(此处:Link和internLink)始终显示为类和方法。在这两个参数之后,可能会有0到XXX个参数,具体取决于方法。我已经过度训练了..

编辑:我尝试使用preg_replace但是如果有必要,我会打开一个全新的方式!

2 个答案:

答案 0 :(得分:0)

<?php
$subject = "Hello, here's the Link you look for: [[Link,internLink,Go,Login]].";

$result = preg_replace_callback(
        '/\[\[(.*?)]\]/',
        function ($matches) {
            $args = explode(",", $matches[1]);
            $args = array_map("trim", $args);

            $x1 = !empty($args[0])?$args[0]:"default";
            $x2 = isset($args[1])?$args[1]:"default";
            $x3 = "";

            $args = array_slice($args, 2);
            if (count($args) > 0) {
                $x3 = "'" . implode("', '", $args) . "'";
            }
            return "K :: gI('$x1')->$x2($x3);";
        },
        $subject
    );

echo "$result\n";

答案 1 :(得分:0)

所以这是我的最终方法:

PUBLIC function formatClasses($b) {

        $subject = $b;

        $result = 
            preg_replace_callback(
                '/\[\[(.*?)]\]/',
                function ($matches) {
                    $args = explode(",", $matches[1]);
                    $args = array_map("trim", $args);

                    $x1 = !empty($args[0])?$args[0]:"default";
                    $x2 = isset($args[1])?$args[1]:"default";

                    $args = array_slice($args, 2);

                    return call_user_func_array(array(K :: gI($x1), $x2), $args);

                },
                $subject
            );

        return $result;

}

非常感谢Victor!