我今天尝试了这个代码!但它没有给出我预期的输出..这是我的代码..
<?php
namePrint('Rajitha');
function namePrint($name) {
echo $name;
}
wrap('tobaco');
function wrap($txt) {
global $name;
echo "Your username is ".$name." ".$txt."";
}
?>
此代码将在屏幕上打印
RajithaYour username is tobaco
但我想得到
RajithaRajithaYour username is tobaco
我的问题是:为什么wrap函数中的$ name变量不起作用?
感谢。
答案 0 :(得分:2)
切勿使用echo
内部函数输出结果。永远不要将global
用于变量。
你在函数内部使用了echo
,因此你会得到意想不到的输出。
echo namePrint('Rajitha');
function namePrint($name){
return $name;
}
echo wrap('tobaco');
function wrap($txt){
//global $name;
return "Your username is ".namePrint('Rajitha')." ".$txt."";
}
RajithaRajithaYour username is tobaco
RajithaYour username is Rajitha tobaco
答案 1 :(得分:1)
如果你想围绕另一个函数包装一个函数,你可以简单地传递一个闭包作为参数之一:
function wrap($fn, $txt)
{
echo "Your username is ";
$fn();
echo ' ' . $txt;
}
wrap(function() {
namePrint('Rajitha');
}, 'tobaco');
这种结构很精致;使用函数返回值更可靠:
function getFormattedName($name) {
return $name;
}
echo getFormattedName('Jack');
然后,换行函数:
function wrap($fn, $txt)
{
return sprintf("Your username is %s %s", $fn(), $txt);
}
echo wrap(function() {
return getFormattedName('Jack');
}, 'tobaco');
答案 2 :(得分:0)
另一种选择是将$ name作为参数传递给wrap函数。
<?php
$name = 'Rajitha';
function namePrint($name){
echo $name;
}
function wrap($txt, $name){
echo "Your username is " . $name . " ". $txt;
}
namePrint($name);
wrap('tobaco', $name);
?>
答案 3 :(得分:-1)
$ name应该被声明并初始化为全局变量。然后你可以得到你需要的输出。
代码应如下所示。
<?php
$name = 'Rajitha';
namePrint($name);
function namePrint($name){
echo $name;
}
wrap('tobaco');
function wrap($txt){
global $name;
echo "Your username is ".$name." ".$txt."";
}
?>