Создайте вызов метода из строки

на данный момент я ищу способ вызова метода из строки. Моя строка выглядит так:

"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, но я открыт для совершенно нового пути, если это необходимо!

1

Решение

<?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";
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;

}

Большое спасибо Виктору!

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector