我设置了var:
$name = "john";
然后我有一个功能:
function whatever(){
$name .= " smith";
}
在函数外部我要转储名称:
var_dump($name);
但只有约翰输出。我尝试过使用:
function whatever() use ($name) {
var_dump($name) //john
$name .= " smith";
}
但是函数外的最终var转储仍然没有附加smith。我哪里错了?
答案 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());