从字符串创建方法调用
Create a Method-Call from a 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)总是显示为 class 和方法。在这两个参数之后可能有 0 - XXX 参数,具体取决于 method.I 过度紧张..
编辑:我尝试使用 preg_replace,但如有必要,我愿意采用全新的方式!
<?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";
所以这是我最后的方法:
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;
}
非常感谢维克多!
目前我正在寻找一种从字符串调用方法的方法。我的字符串看起来像这样:
"Hello, here's the Link you look for: [[Link,internLink,Go,Login]]."
我想将 [[Link,internLink,Go,Login]]
替换为:
K :: gI('Link')->internLink('Go', 'Login');
有办法吗?原因是,我的数据库中保存了各种文本,我需要在这些文本中调用方法。也只有第一个参数(此处:Link 和 internLink)总是显示为 class 和方法。在这两个参数之后可能有 0 - XXX 参数,具体取决于 method.I 过度紧张..
编辑:我尝试使用 preg_replace,但如有必要,我愿意采用全新的方式!
<?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";
所以这是我最后的方法:
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;
}
非常感谢维克多!