首页 / PHP / PHP for;变量范围
PHP for;变量范围
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP for;变量范围,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3667字,纯文字阅读大概需要6分钟。
内容图文
![PHP for;变量范围](/upload/InfoBanner/zyjiaocheng/704/94ae37162e48487db59003147af171d2.jpg)
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";
?>
基本上,我在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”则不是.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!
所以我从@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>
仍然没有,现在我似乎已经失去了回声声明的输出……
解决方法:
Do variables in the for / foreach loop have a local scope? If so, how do I make it global?
PHP中只有两种范围:全局范围和本地函数范围.
局部函数作用域包含函数的参数和在函数体内设置的变量.范围是在调用函数时创建的,并且在函数执行完成时(在执行return语句之后或在最后一个语句之后达到其结束时)销毁它.
全局范围包含由任何函数外部的代码设置的所有变量.它由主脚本(由解释器调用的脚本)创建.
included和required文件不会创建新范围.包含文件中的函数外部的代码在放置include或require语句的范围内运行.这意味着,如果include语句出现在包含include语句的函数的本地范围的任何函数之外,则为全局范围.所有四个包含语句(include,include_once,require,require_once)在这个问题上的工作方式相同.
任何变量在其范围内都可用,因为它是第一次设置,直到使用unset()删除它或直到其范围被销毁.
阅读PHP documentation variables scope的更多信息.
回答你的问题:如果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 />";
}
}
问题很明显:它在每次迭代时修改变量$active的值.除了$active的最后一个赋值之外的所有赋值都是无用的.只有最后一个才算.并且,最有可能的是,在最后一次迭代中,if($title == $value)和$active的else分支变为”(空字符串).
这个问题有几个简单的解决方案.例如,您可以在上述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 for;变量范围全部内容,希望文章能够帮你解决PHP for;变量范围所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。