gpt4 book ai didi

PHP ; foreach 变量范围

转载 作者:行者123 更新时间:2023-12-02 17:49:59 25 4
gpt4 key购买 nike

for/foreach 循环中的变量是否具有局部作用域?如果是这样,我如何使其全局化?

页面.php:

<?php
$title = "2";
$menu[0] = "1";
$menu[1] = "2";
$menu[2] = "3";
$menu[3] = "4";
$menu[4] = "5";
$menu[5] = "6";
$menu[6] = "7";
$menu[7] = "8";


foreach ($menu as $value){

if ($title == $value){
$active = "active";
echo "if " . $active. $title . $menu[$x] ." <br /><br />";
}
else {
$active = "";
echo "else " . $active. $title . $menu[$x] ." <br /><br />";
}}

include "header.php";

foreach ($menu as $value) {
var_dump($active);
echo "$value <br>";
}


include "header.php";
?>

<!-- begin page content -->
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<!-- end page content -->

<?php
include "footer.php";
?>

本质上,我在 header.php 中有这一行:

<li class="mainNav <?php echo $active; ?>" style="z-index:8">
<a href="http://www.com"><?php echo $menu[0]; ?></a></li>

如果是该页面,我希望列表具有 class="mainNav active" ,如果不是,则具有 class="mainNav active"

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!

所以我根据 @urfusion 建议创建了一个函数。现在page.php:

<?php
$title = "2";
$menu[0] = "1";
$menu[1] = "2";
$menu[2] = "3";
$menu[3] = "4";
$menu[4] = "5";
$menu[5] = "6";
$menu[6] = "7";
$menu[7] = "8;
?>


<?php


function mainNav($menu) {


foreach ($menu as $value){

if ($title == $value){
$active = "active";
echo "if " . $active. $title . $menu[$x] . " <br /><br />";
}
else {
$active = " ";
echo "else " . $active. $title . $menu[$x] . " <br /><br />";
}


echo "function" . $active . $value;
return $active;

}
}


include "header.php";
?>


<!-- begin page content -->
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<!-- end page content -->

<?php
include "footer.php";
?>

还有 header.php:

 <li class="mainNav <?php mainNav(); ?>" style="z-index:8">
<a href="http://www.com"><?php echo $menu[1]; ?></a></li>

仍然没有任何结果,现在我似乎丢失了 echo 语句的输出......

最佳答案

Do variables in the for / foreach loop have a local scope? If so, how do I make it global?

PHP 中只有两种作用域:全局作用域和局部函数作用域。

局部函数作用域包含函数的参数以及在函数体内设置的变量。作用域在调用函数时创建,并在函数执行完成时销毁。

全局作用域包含由任何函数外部的代码设置的所有变量。它是在主脚本(由解释器调用的脚本)启动时创建的。

includedrequired文件不会创建新的范围。包含文件中函数外部的代码在 includerequire 语句所在的范围内运行。这意味着,如果 include 语句出现在包含 include 语句的函数的本地作用域的任何函数之外,则为全局作用域。所有四个包含语句(includeinclude_oncerequirerequire_once)对于此事的作用相同。 p>

任何变量自第一次设置以来都在其范围内可用,直到使用unset()将其删除为止。或直到其范围被破坏。

了解更多关于variables scope的信息关于 PHP documentation .

<小时/>

回答你的问题:如果forforeach循环放置在函数中,那么它们定义的变量具有局部作用域(函数的作用域);否则它们具有全局范围。

<小时/>

代码中的问题(错误的缩进无法帮助您看到它)位于第一个 foreach 中。

这是正确缩进的代码:

foreach ($menu as $value) {
if ($title == $value) {
$active = "active";
echo "if " . $active. $title . $menu[$x] ." <br /><br />";
} else {
$active = "";
echo "else " . $active. $title . $menu[$x] ." <br /><br />";
}
}

问题很明显:它会在每次迭代时修改变量 $active 的值。除了最后一个 $active 分配之外的所有分配都是无用的。只有最后一项才算数。并且,最有可能的是,在最后一次迭代中,它采用 if ($title == $value)else 分支,并且 $active 变为 ''(空字符串)。

这个问题有几个简单的解决方案。例如,您可以在前面提到的 foreach 中显示菜单:

foreach ($menu as $value) {
if ($title == $value) {
$active = "active";
} else {
$active = "";
}
?>
<li class="mainNav <?php echo $active; ?>" style="z-index:8">
<a href="http://www.com"><?php echo $value; ?></a></li>
<?php
}

事实上,所有这些东西都应该放入 header.php 中。

关于PHP ; foreach 变量范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34637603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com