Как использовать функцию внутри строки? - PullRequest
7 голосов
/ 15 декабря 2010
'<a rel="nofollow" href="$1" class="bbc_link new_win" target="_blank">'

Я хотел бы использовать функцию urlencode():

 '<a rel="nofollow" href="urlencode($1)" class="bbc_link new_win" target="_blank">'

... но я не могу использовать это:

 '<a rel="nofollow" href="'.urlencode($1).'" class="bbc_link new_win" target="_blank">'

... потому что $1 не является переменной в строке;вместо этого это мета-переменная в простом бесплатном форуме.

отправляет http://www.test.com/out.php?out=http://www.example.com

Ответы [ 6 ]

6 голосов
/ 16 декабря 2010

как насчет этого сумасшедшего хака?

<?
$_ = 'urlencode';
echo "<a rel=\"nofollow\" href=\"{$_($1)}\" class=\"bbc_link new_win\" target=\"_blank\">";
4 голосов
/ 16 мая 2013

Проверьте этот трюк:

function foo() { return "title"; }

$func = function($param) { return $param; };

$link = 'http://www.test.com/out.php?out=http://www.example.com';
echo "<a rel=\"nofollow\" href=\"{$func(urlencode($link))}\" class=\"bbc_link new_win\" target=\"_blank\">{$func(foo())}</a>";

$func() будет вызываться как функция, а выражение в скобках будет оцениваться как любой другой код PHP.

взломан здесь

3 голосов
/ 15 декабря 2010

Есть способ сделать это, но примите мой совет и не используйте его. Вы не должны использовать вызовы функций внутри строк. Однако я приведу пример, чтобы показать, на что способен PHP.

НО ЭТО ЧРЕЗВЫЧАЙНЫЙ ПРИМЕР ПЛОХОГО ПРОГРАММИРОВАНИЯ !!!!

<?php
class FunctionAgent{
    public function __call($name,$args){
        switch (count($args)){
            case 0:
                return  $name();
                break;
            case 1:
                return  $name($args[0]);
                break;
            case 2:
                return  $name($args[0],$args[1]);
                break;  
            case 3:
                return  $name($args[0],$args[1],$args[2]);
                break;
            case 4:
                return  $name($args[0],$args[1],$args[2],$args[3]);
                break;
            case 5:
                return  $name($args[0],$args[1],$args[2],$args[3],$args[4]);
                break;
        }
    }   
}

$_ = new  FunctionAgent();
echo "the current date is {$_->date("y-m-d")}";

?>
2 голосов
/ 15 декабря 2010

Я только что просмотрел раздел парсинга строки в руководстве по PHP , и, похоже, не существует способа вызова функции из строки в кавычках (за исключением динамического присвоения имени переменной) , К сожалению.

2 голосов
/ 15 декабря 2010

Вы не можете сделать это.Вам нужно кодировать значение, где оно сгенерировано или где оно заменено, в этой строке, а не в этом шаблоне, где у вас нет к нему доступа.

0 голосов
/ 15 декабря 2010

Вам нужно расширить работу вашего движка шаблонов, чтобы поддерживать это Нет способа заставить PHP сделать это за вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...