PHP注意:未定义的变量,但已定义

时间:2015-07-28 09:28:27

标签: php

我收到此错误消息:

Notice: Undefined variable: string‌​ in common_yyyymmdd_is_valid() (line 933 of XXXXXX/common/common.module).

已定义。这是代码:

if (!array_key_exists('exception_date', $exceptions)) {
     // Blah
}
elseif (!common_yyyymmdd_is_valid($exceptions['exception_date'])) {
     // Blah
}
elseif (!common_date_is_future($exceptions['exception_date']))  {
     // Blah
}

第一个elseif语句导致此问题。如果我发表评论,尽管使用相同的变量,第二个也不会给我同样的错误。

function common_yyyymmdd_is_valid($string) {
     watchdog('TEST','string: ' . $string);
933  return (bool) preg_match("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/", $string‌​);
}

function common_date_is_future($string) {
     $date = new DateTime($string);
     $now = new DateTime();
     if($date < $now) {
         return FALSE;
     }
     return TRUE;
}

我不明白为什么这是未定义的。看门狗向我显示了我发送的字符串。

2 个答案:

答案 0 :(得分:1)

正如Mario在问题评论中指出的那样,变量名中有一个Unicode空格(可能是从我复制并粘贴到另一个SE问题时)。

原件:

function common_yyyymmdd_is_valid($string) {
    watchdog('TEST','string: ' . $string);
    return (bool) preg_match("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/", $string‌​);
}

我手动重写了这一行,并且它有效。这是更新的:

function common_yyyymmdd_is_valid($string) {
    return (bool) preg_match("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/", $string);
}

我在这里或在我使用的textmate应用程序中看不出区别。我不确定马里奥是如何看到它的,但我从他知道的经验中打赌来检查。

答案 1 :(得分:0)

在通话功能之前,请检查异常日期是否存储在$exceptions数组中,如:

if(isset($exceptions['exception_date']) && !empty($exceptions['exception_date'])){

    if (!common_yyyymmdd_is_valid($exceptions['exception_date'])) {
       // Blah
    }
    elseif (!common_date_is_future($exceptions['exception_date']))  {
       // Blah
    }

}