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

Php 如何在字符串中使用函数?,php,string,Php,String,。。。但我不能用这个: '<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您不能这样做。您需要在该字符串中对生成或替换的值进行编码,而不是在您无权访问该值的模板中进行编码。我刚刚

。。。但我不能用这个:

 '<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

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

我刚刚查看了,似乎没有从带引号的字符串中调用函数的方法(动态分配变量名除外)。抱歉。

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

有办法做到这一点,但请接受我的建议,不要使用它。您不应该在字符串中使用函数调用。 然而,我将发布一个示例来展示PHP的功能

但这是一个糟糕编程的极端例子

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

这个疯狂的黑客怎么样

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

?>
看看这个技巧:

<?
$_ = 'urlencode';
echo "<a rel=\"nofollow\" href=\"{$_($1)}\" class=\"bbc_link new_win\" target=\"_blank\">";
函数foo(){return“title”;}
$func=函数($param){return$param;};
$link='1http://www.test.com/out.php?out=http://www.example.com';
回声“;
$func()
将作为函数调用,括号中的表达式将作为任何其他PHP代码进行计算


你的警告与我的直觉相呼应。但我能解释的唯一问题是,这是一个陌生的惯例。在OOP上下文中,类/对象确实是。如果
FunctionAgent
让开发人员的生活更轻松(脚本执行时间的每毫秒都不重要),为什么不使用它呢?@smhmic我的金科玉律是:坚持人们的期望或详细记录它。非常有趣的是,如果你必须写一篇深入的解释,说明你在做什么,为什么要这样做,以及你考虑过并摒弃了哪种“更干净”的方法,那么你很少会违反“规则”。但是看看这段3年的代码,我意识到我应该使用
call\u user\u func
<?
$_ = 'urlencode';
echo "<a rel=\"nofollow\" href=\"{$_($1)}\" class=\"bbc_link new_win\" target=\"_blank\">";
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>";