将字符串中的变量作为参数传递
我有一种情况,在我对它们执行操作之前,我想检查大量字符串是否为空。我不希望有执行上手动每一个字符串这张支票,所以我把它看起来像这样的功能:将字符串中的变量作为参数传递
function format_field($field_name, $format) {
$value = get_field($field_name);
if ($value != "") {
return $format;
}
return "";
}
这个函数的调用看起来是这样的:
format_field('website', "<p><strong>Website:</strong><a href=\"$value\">$value</a></p>");
我希望通过在传递给format_field()
的字符串中写入$value
,$value
的值将在函数返回前在函数中扩展,但似乎并非如此。
这是否可能,我只是错了?
我也知道关于sprintf()
,但由于$value
可以在字符串中多次引用,所以它不太理想。
您的代码存在的问题是,当通过"<p><strong>Website:</strong><a href=\"$value\">$value</a></p>"
作为函数参数时,$value
变量不会在功能块的稍后被替换。
因此,举例来说,如果你有$value = 'https://a.b.c';
的$format
值变为"<p><strong>Website:</strong><a href=\"https://a.b.c\">https://a.b.c</a></p>"
你可以尝试什么,是替代一个占位符,例如
通"<p><strong>Website:</strong><a href=\"{value}\">{value}</a></p>"
为$format
参数,然后使用类似的东西:
$format = "<p><strong>Website:</strong><a href=\"{value}\">{value}</a></p>";
$value = 'https://www.google.com';
echo preg_replace('#\{value\}#i', $value, $format);
实际上返回:<p><strong>Website:</strong><a href="https://www.google.com">https://www.google.com</a></p>
谢谢你,我跟着去了。我希望我可以使用变量名称,因为这对任何人来说都是显而易见的,但是只要替换值就可以正常工作。 – Alex
那你所要的输出是什么?如果'网站'中有一个字符串,你想要它说''网站:something“'或完全忽略整个输出? – Andy
函数内部的变量'$ value'与调用函数的代码中的变量不同。阅读更多关于[变量范围](http://php.net/manual/en/language.variables.scope.php)。 – axiac
尝试仅将'$ value'作为第二个参数传递给'format_field(arg1,arg2)',然后在返回之前在函数中处理它,当然可以将'get_field()'函数作为@安迪在 –