0

我今天尝试了这段代码!但它没有给出我期望的输出..这是我的代码..

<?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 变量不起作用?

谢谢。

4

4 回答 4

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

输出1

在功能键盘中使用返回

RajithaYour username is Rajitha tobaco
于 2013-08-02T06:16:18.007 回答
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');
于 2013-08-02T06:28:43.433 回答
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);

?>
于 2013-08-02T06:19:42.187 回答
-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."";
}

?>
于 2013-08-02T06:17:39.670 回答