在函数内部和外部使用var?

时间:2016-10-12 10:25:18

标签: php

我设置了var:

$name = "john";

然后我有一个功能:

function whatever(){
    $name .= " smith";
}

在函数外部我要转储名称:

var_dump($name);

但只有约翰输出。我尝试过使用:

function whatever() use ($name) {
    var_dump($name) //john
    $name .= " smith";
}

但是函数外的最终var转储仍然没有附加smith。我哪里错了?

3 个答案:

答案 0 :(得分:1)

最简单的方法:

$name = "john";

function merge($name) {
  return "$name smith";
}

$name = merge($name);

echo $name; // shows you: john smith

我认为这正是您所寻找的

请勿尝试使用javascript中的外部范围变量。那不可测试和不好的做法

答案 1 :(得分:0)

您在此遇到的是PHP中 variable scope 的概念。

在函数内部定义的内容与函数内部无关,因为函数具有自己的作用域。

所以你可以用多种方式做你想做的事。

方法1:使用Global关键字

$a = 1; $b = 2;

function Sum(){
    global $a, $b;

    $b = $a + $b;
} 

Sum();
echo $b;

注意:global关键字使变量可用于“global”范围,并且可以在运行时期间从任何类甚至外部定义和访问该变量。从维护和调试的角度来看,它会产生很多麻烦,因此非常不赞成并被视为最后的手段

方法2: Function Argument

$name = "john";
$lastname = "smith";
function fullname($name, $lastname){
    $name .= $lastname;
    return $name;
}
echo fullname($name, $lastname);

方法3:使用Reference

function foo(&$var){
    $var++;
}

$a=5;
foo($a);
// $a is 6 here

答案 2 :(得分:0)

这是一个可变范围的案例。你可以在这里做的是通过全局或传递参数:

// Pass by parameter
$name = "john";

function whatever($name){
    $name .= " smith";
    return $name;
}

var_dump(whatever($name));

// Calling it via global
function whatever2(){
    global $name;
    $name .= " smith";
    return $name;
}

var_dump(whatever2());

如果您仍想使用“使用”:

$name2 = "john";

$full_name = function () use ($name2){
    return $name2 . " smith";
};

var_dump($full_name());