Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当foreach()伪名称与数组名称匹配时,PHP$\会话嵌套数组将丢失_Php - Fatal编程技术网

当foreach()伪名称与数组名称匹配时,PHP$\会话嵌套数组将丢失

当foreach()伪名称与数组名称匹配时,PHP$\会话嵌套数组将丢失,php,Php,有人能确认以下是PHP5.2.13的一个bug吗:(谢谢) 上面的PHP脚本在第三次运行时崩溃。foreach()循环似乎有一个(不正确的)副作用,它会清除嵌套的$\u会话数组,因为循环中使用的内部变量与嵌套的$\u会话数组的名称匹配。只需将内部foreach()变量的名称更改为其他名称即可解决问题 注意:在运行脚本3次之前清除会话变量 同样,将“$breadcrumb”更改为“$theu breadcrumb”可以解决问题。但是foreach()循环应该没有副作用。注意:$breadcru

有人能确认以下是PHP5.2.13的一个bug吗:(谢谢)


上面的PHP脚本在第三次运行时崩溃。foreach()循环似乎有一个(不正确的)副作用,它会清除嵌套的$\u会话数组,因为循环中使用的内部变量与嵌套的$\u会话数组的名称匹配。只需将内部foreach()变量的名称更改为其他名称即可解决问题

注意:在运行脚本3次之前清除会话变量

同样,将“$breadcrumb”更改为“$theu breadcrumb”可以解决问题。但是foreach()循环应该没有副作用。注意:$breadcrumb的作用域与$\u SESSION[“breadcrumb”]的作用域不同,因此不应发生冲突

请注意,在数组上执行print_r()时,第一次(正确地)清空该数组,第二次(正确地)填充该数组,第三次(嵌套数组已清除)错误地设置为“array([breadcrumb]=>trail”)

第三次运行时PHP错误日志中的错误: PHP致命错误:无法将字符串偏移量用作第5行的数组

这个问题在PHP5.3上不是问题——只有PHP5.2.13。我在PHP站点(PHP.net)的PHP变更日志中找不到任何关于这个问题的注释,我必须在我的实时站点上使用5.2.13,所以我在这里发布,希望有人能够确认。我还在php.net上发布了一个bug报告

谢谢, 丹尼森鲍姆

预期结果: 第5行没有PHP5.2.13崩溃

实际结果:
PHP 5.2.13在第5行崩溃。

我使用5.2.6和works,没有错误。

已解决。notJim指出register\u globals php.ini设置。它被设置为On。如预期的那样,禁用可分隔作用域。注意:从PHP5.3开始(至少早在PHP5.3之前),register_globals就已经被弃用了,可能更久远了。

是的,这绝对是一个bug。我将foreach语句中的变量名更改为与会话变量不同的名称,以便两者都能正常工作。这个问题在php版本5.3.0中没有出现。

这就是我使用5.3.2的原因。您能确保没有在上注册全局变量吗?值得一提的是,这在5.3.2notJim上非常有效-就是这样。我不知道这个场景的存在。
<?php
    session_start();
    if (!is_array($_SESSION["breadcrumb"]["trail"]))
    {
        $_SESSION["breadcrumb"]["trail"][] = "trail";
    } 
    foreach ($_SESSION["breadcrumb"]["trail"] as $breadcrumb)
    {
        echo $breadcrumb;
    }
?>