2015-07-28 3 views
-2

Я получаю сообщение об ошибке:PHP Примечание: Undefined переменной, но определяется

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; 
} 

Я не понимаю, почему это не определено. Наблюдатель показывает мне строку, которую я отправляю.

+0

опубликуйте полную ошибку здесь –

+2

'string' является зарезервированным словом в PHP. Вы не можете использовать его как имя переменной. –

+1

@HoboSapiens Хорошо быстрая проверка доказала бы, что утверждение ** неверно **. _ Эти слова не могут использоваться для обозначения класса, интерфейса или признака. Эти слова также запрещены для использования в пространствах имен. См. [Руководство] (http://php.net/manual/en/reserved.other-reserved-words.php) Использование в переменных ОК – RiggsFolly

ответ

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 
    } 

} 
+0

Да, это так, это не показано в вопросе для краткости (и работает над вторым утверждением). Обновление вопроса, чтобы показать это сейчас. – Paul

+0

$ exceptions ['exception_date'] Это объект или строка даты? –

+0

Это строка. Это исправлено (видимо, в имени переменной был символ unicode в виде пробела - я не вижу этого, но я его повторно написал, и он сработал.). Обновление вопроса, чтобы показать это. – Paul

1

Как отметил Марио в комментариях вопросов, был пробел 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, которое я использую. Я не уверен, как Марио смог это увидеть, но я поспорил на опыте, который, как он знал, проверял.

Смежные вопросы