PHP用于;foreach变量范围

PHP用于;foreach变量范围,php,loops,variables,scope,Php,Loops,Variables,Scope,for/foreach循环中的变量是否具有局部作用域?如果是,我如何使其全球化 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"; foreach ($menu as $value){

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

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


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

您的代码应该如下所示

$active = "";
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 />";
   }
}
有关


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

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

局部函数范围包含函数的参数和函数体内部设置的变量。在调用函数时创建作用域,在函数执行完成时销毁作用域(在函数执行
return
语句后,或在最后一个语句后到达其关闭
}

全局范围包含代码在任何函数之外设置的所有变量。它由主脚本(解释器调用的脚本)创建

和文件不会创建新的作用域。包含文件中函数之外的代码在放置
include
require
语句的范围内运行。这意味着,如果
include
语句出现在包含
include
语句的函数的本地范围的任何函数之外,则为全局范围。所有四个包含语句(
include
include_once
require
require_once
)在这一问题上的作用相同

任何变量在其作用域中都是可用的,因为它是第一次设置的,直到使用删除它或销毁它的作用域为止

阅读更多关于网络的信息


回答您的问题:如果将
for
foreach
循环置于函数中,则它们定义的变量具有局部范围(函数的范围);否则,它们具有全局范围


代码中的问题(错误的缩进无法帮助您看到)出现在第一个
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 />";
    }
}

事实上,所有这些内容都应该进入
header.php

foreach
循环之前初始化
$active
“for/foreach循环中的变量是否具有局部作用域?”-循环、开关/案例、try-catch块等在php中不构成作用域。我不知道你想做什么。第二个foreach完全把我甩了!您是否确定
$title
在您的方法中是全局可用的,如中所示?在我看来,您应该在函数声明中使用类似
using(…)
的子句。我得到了正确的echo语句,但它没有更改header.php。我想知道这是因为header.php文档中不包含foreach循环,还是因为它是其他东西……如果不通过任何
函数
url
会话
变量,就不能在其他文件中使用变量。当包含header.php(在循环之后)。在您的示例中,最后一个赋值是循环迭代中的
$value==8
,因此
$active='
“如果不通过任何函数或url或会话变量,就不能在其他文件中使用变量”-什么?另一种说法是:“大多数情况下,所有PHP变量都只有一个作用域。这个作用域也跨越了包含的和必需的文件。”
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 />";
    }
}
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
}