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