试图定义一个未定义的变量错误

时间:2012-01-14 09:39:46

标签: php

我收到一个未定义的变量错误,我尝试添加var $nx = '';,但这没有帮助。我错过了什么吗? 注意:未定义的变量:第55行/home/social/public_html/kernel/parser.php中的nx

                while (!feof($f)) {
                    $s = chop(fgets($f,4096));
                        if ($s == '') continue;
                        if (substr($s,0,5) == '<!--[') {
                                if ($nx != '') $this->templ[] = $nx;
                                $this->templ[] = $s;
                                $nx = '';
                                }
                        elseif (substr($s,0,5) == '<?php') {
                                if ($nx != '') $this->templ[] = $nx;
                                $nx = $s;
                                }
                        else 
////// LINE 55                  $nx .= ($nx != '' ? "\n" : '').$s;

                        if (substr($nx,-2) == '?>') {
                                $this->templ[] = $nx;
                                $nx = '';
                                }
                        }

2 个答案:

答案 0 :(得分:2)

您在if块中定义了var。

这是正确的代码:

                $nx = '';
                while (!feof($f)) {
                $s = chop(fgets($f,4096));
                    if ($s == '') continue;
                    if (substr($s,0,5) == '<!--[') {
                            if ($nx != '') $this->templ[] = $nx;
                            $this->templ[] = $s;
                            $nx = '';
                            }
                    elseif (substr($s,0,5) == '<?php') {
                            if ($nx != '') $this->templ[] = $nx;
                            $nx = $s;
                            }
                    else 
                            $nx .= ($nx != '' ? "\n" : '').$s;

                    if (substr($nx,-2) == '?>') {
                            $this->templ[] = $nx;
                            $nx = '';
                            }
                    }

答案 1 :(得分:0)

因为您在if块中定义它,但假设它存在于 else 块中,即当if与条件不匹配时使用的内容!

在这一行之后初始化它,以便if,elseif和else都将变量初始化为空字符串(如你所愿):

$s = chop(fgets($f,4096));
$nx = '';

或整个街区之前

修改

但更好的解决方案是告诉$ nx应该来自哪个,因为你假设它存在的任何地方,它与空字符串不同。那么,它应该持有什么? 无论如何,确保无论它必须包含什么,它都存在。再次阅读你的代码,我在许多地方看到你希望它不是一个空字符串..

此外,您没有提及您的代码是否是函数的一部分。如果是这种情况,请考虑该函数是否具有范围,因此如果您在外部定义该函数,则需要将其提供给该函数,否则该函数将无法看到它。