【发布时间】:2014-09-11 09:04:24
【问题描述】:
<?php
namespace foo;
class bar{
public static function runner( $data )
{
extract ($data);
foreach( $elements as $element )
{
$varsToWipe = array_keys($element);
extract( $element );
/*
bunch of code using the variables extracted from $element, eg if( isset($runnerSpeed) )
*/
//now i want to be able to unset all the elements set from the extract within the foreach loop
foreach( $varsToWipe as $var )
{
//but what goes here in the unset function?
\unset( );
}
}
}
}
如何在 runner 方法中取消设置从 foreach 循环中提取的变量?
$data 的内容可能会有所不同,需要取消设置 var,以免在下一次循环迭代中再次使用。我知道我可以引用数组本身,但如果这可行的话,写起来会更快......
谢谢, 约翰
一个更简单的 foreach 示例:
$array = range(0,6);
$i = 0;
foreach( $array as $a )
{
echo $i.' ';
if( $i == 0 )
{
$egg = true;
}
++$i;
if( isset($egg) )
{
echo 'eggs ';
}
}
将打印
0个鸡蛋1个鸡蛋2个鸡蛋3个鸡蛋4个鸡蛋5个鸡蛋6个鸡蛋
然后,您可以从全局变量中删除 $egg,因为它就是它所在的位置:
$array = range(0,6);
$i = 0;
foreach( $array as $a )
{
echo $i.' ';
if( $i == 0 )
{
$egg = true;
}
else
{
unset( $GLOBALS['egg'] );
}
++$i;
if( isset($egg) )
{
echo 'eggs ';
}
}
现在它会打印出来:
0 个鸡蛋 1 2 3 4 5 6
但是当你在一个类方法中时你会取消设置什么,变量实际存储在哪里?
【问题讨论】:
-
函数执行终止时,提取的变量应该自动超出范围
-
函数执行,是否包括foreach函数?
-
不,这是
runner函数终止的时间:标准 PHP 变量范围规则 -
是的,所以 foreach 循环的第二次迭代.. 在第一次迭代中设置并且在第二次迭代中未重置的任何 var 都将因此持续存在。这就是我要清理的内容..还是我弄错了?
-
你为什么要首先使用
extract:它会导致重大问题,因为你不知道变量叫什么:你为什么不能简单地使用$data数组第一名。