PHP在另一个函数中使用内部函数变量

时间:2013-08-02 06:12:54

标签: php

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

<?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 个答案:

答案 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."";
}

输出

在函数Codepad中使用echo

RajithaRajithaYour username is  tobaco

Output1

使用函数Codepad中的return

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

?>