如何在字符串中使用函数?

时间:2010-12-15 06:16:40

标签: php string

'<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 个答案:

答案 0 :(得分:6)

这个疯狂的黑客怎么样?

<?
$_ = 'urlencode';
echo "<a rel=\"nofollow\" href=\"{$_($1)}\" class=\"bbc_link new_win\" target=\"_blank\">";

答案 1 :(得分:4)

看看这个技巧:

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代码。

hack is found here

答案 2 :(得分:3)

有一种方法可以做到这一点,但请接受我的建议,不要使用它。你不应该在字符串中使用函数调用。 但是我会发布一个例子来展示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")}";

?>

答案 3 :(得分:2)

你不能这样做。您需要在此字符串中对生成的值或替换位置进行编码,而不是在您无法访问它的模板中。

答案 4 :(得分:2)

我刚刚查看了string parsing section of the PHP manual,似乎没有一种方法可以在带引号的字符串中调用函数(动态分配变量名除外)。遗憾。

答案 5 :(得分:0)

您需要扩展模板引擎的工作方式以支持此功能。没有办法让PHP为你做这件事。