IF 语句中未定义的变量(但似乎声明正确)


Undefined variable in IF statement (but seems correctly declared)

有些事情让我发疯,如果我在 IF 语句中声明一个变量,我会得到一个未定义的变量。如果我在 IF 语句上方声明此变量,PHP 通知就会消失。

我的代码 :

if($tab_sel==FILENAME_DEFAULT){ // FILENAME_DEFAULT = index.php
  if(...){
       some functions
  }
  $nb_pages=ceil($count/$limit) : 0;
}
echo $nb_pages; //4000 is displayed on the page (OK), 

但在 Nginx 日志中,我得到:

FastCGI sent in stderr: "PHP message: PHP Notice : Undefined variable nb_pages in /.../index.php

但是当我加载页面时,我可以看到nb_page显示正确(例如:值为 4000),但在日志中,未定义的变量。

在我的示例中,如果我在"if($tab_sel==FILENAME_DEFAULT){"上面声明nb_pages,则未定义的消失。

知道吗?

那是因为您正在创建变量,如果该变量可能无法传递。在这种情况下,变量将是未定义的,PHP 将抛出一个错误,因为它找不到你之后要求的变量。

在 if 之前声明它,你会没事的。

$nb_pages;
if($tab_sel==FILENAME_DEFAULT){ 
  if(...){

我认为这可能是一个环境问题。尝试将FILENAME_DEFAULT$nb_pages放入日志文件中:

file_put_contents(
    'test.log',
    date('[Y-m-d H:i:s] ') 
    . FILENAME_DEFAULT . "'t" . @$nb_pages . PHP_EOL,
    FILE_APPEND
);

@将阻止警告消息。

我发现为什么它不起作用:

in case of a 404 error page (called FILENAME_404)

我还使用 index.php 文件,在其中调用未声明的变量。

这就是为什么 Nginx 错误说 index.php,不是因为它没有进入if($tab_sel==FILENAME_DEFAULT){,而是因为在其他一些情况下,我也使用 index.phptab_sel=FILENAME_404

谢谢大家!