你好.我最近学习了PHP并试图声明一个全局数组,因此我可以访问函数内部.但我似乎错过了一些东西,因为我得到错误'未定义的变量:'
这是我的代码:
global $second_array;
$second_array = array();
function operatii($v) {
$var1 = $second_array[count($second_array)-1];
$var2 = $second_array[count($second_array)-2];
$rez = null;
echo $var1 . $var2 . "este?";
}
for ($i = 0; $i < count($a); $i++){
if ($a[$i] === "+" || $a[$i] === "-" || $a[$i] === "*" || $a[$i] === "/" ) {
operatii($a[$i]);
} else {
array_push($second_array, $a[$i]);
}
}
Run Code Online (Sandbox Code Playgroud)
我似乎能够$second_array在for循环中使用它,但不能在operatii函数中使用它.
我怎么解决这个问题?
Spu*_*ley 18
有两种方法可以在PHP中引用全局变量:
global在使用该变量的每个函数的开头使用关键字.$GLOBALS数组.其中,我建议坚持使用第二个,因为它始终清楚地表明变量是全局变量.
全局变量的一个问题是跟踪它们的使用位置; 使用该$GLOBALS阵列在某种程度上缓解了这个问题.
但是,使用全局变量仍存在问题; 在代码中使用过多的全局变量通常被认为是不好的做法.在广泛使用全局变量的许多遗留系统之后,我可以保证它们可能会给未来的开发人员带来很多麻烦.
使用全局变量也使得为代码编写正式的测试套件变得更加困难(即单元测试).
因此,我的建议是尽可能避免使用全局变量.在某些情况下它们是必要的,但是你可以越多地避免它们,而是将变量传递到你的函数和类中而不是将它们变成全局变量,那就更好了.
总结一下:
如果你必须使用全局变量,请引用它们$GLOBALS['varname'],但通常最好不要使用它们.
希望有所帮助.
至于每个人的建议,你应该将你的数组作为函数参数传递.在重大案例中使用全局变量是一种不好的做法.
function operatii($second_array, $v) {
$var1 = $second_array[count($second_array)-1];
$var2 = $second_array[count($second_array)-2];
$rez = null;
echo $var1 . $var2 . "este?";
}
$second_array = array();
for ($i = 0; $i < count($a); $i++) {
if ($a[$i] === "+" || $a[$i] === "-" || $a[$i] === "*" || $a[$i] === "/" ) {
operatii($second_array, $a[$i]);
} else {
array_push($second_array, $a[$i]);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
对于在谷歌搜索中遇到这个老问题的其他人,
在示例中,变量 $second_array 被声明为全局变量,而不是在下一行中创建的数组。为避免这种情况,请确保全局声明在数组声明之后。我的偏好是将全局声明放在函数本身中。
$second_array = array();
function operatii($v) {
global $second_array;
$var1 = $second_array[count($second_array)-1];
$var2 = $second_array[count($second_array)-2];
$rez = null;
echo $var1 . $var2 . "este?";
}
for ($i = 0; $i < count($a); $i++){
if ($a[$i] === "+" || $a[$i] === "-" || $a[$i] === "*" || $a[$i] === "/" ) {
operatii($a[$i]);
} else {
array_push($second_array, $a[$i]);
}
}
Run Code Online (Sandbox Code Playgroud)