Сообщение об ошибке связано с неудачным фактом, что PHP неявно объявит неизвестный токен как константную строку с тем же именем.
То есть, он пытается интерпретировать это (обратите внимание на отсутствующие кавычки ):
$_POST[department]
Единственный допустимый способ использования этого синтаксиса в PHP заключается в том, что ранее существовала константа department
. Так грустно, а не умирать с фатальной ошибкой на данный момент, оно выдает это Уведомление и действует так, как будто константа была определена с тем же именем и значением:
// Implicit declaration of constant called department with value 'department'
define('department', 'department');
Существуют различные способы, которыми вы можете получить это сообщение об ошибке, но все они имеют одну и ту же причину - токен, который может быть константой.
$my_array[bad_key]
Это то, что проблема в вашем случае, и это потому, что у вас есть ключи массива строк, которые не были указаны. Исправление строковых ключей исправит ошибку:
Изменить:
$department = mysql_real_escape_string($_POST[department]);
...(etc)...
Кому:
$department = mysql_real_escape_string($_POST['department']);
...(etc)...
var_without_dollar
Еще одна причина, по которой вы можете увидеть это сообщение об ошибке, - это оставить параметр $
от переменной или $this->
от члена. Например, любое из следующих может вызвать аналогичное сообщение об ошибке:
my_local; // should be $my_local
my_member; // should be $this->my_member
$bad-variable-name
Аналогичная, но более тонкая проблема может возникнуть, если вы попытаетесь для использования запрещенного символа в имени переменной - дефис (-
) вместо подчеркивания _
будет обычным случаем.
Например, это нормально, поскольку подчеркивания разрешено в именах переменных :
if (123 === $my_var) {
do_something();
}
Но это не так:
if (123 === $my-var) {
do_something();
}
Он будет интерпретироваться так же, как это:
if (123 === $my - var) { // variable $my minus constant 'var'
do_something();
}
Чтобы ссылаться на константу класса, вам нужно указать область видимости класса с ::
, если вы пропустите это, PHP будет думать вы говорите о глобальном define()
.
Например:
class MyClass {
const MY_CONST = 123;
public function my_method() {
return self::MY_CONST; // This is fine
}
public function my_method() {
return MyClass::MY_CONST; // This is fine
}
public function my_bad_method() {
return MY_CONST; // BUG - need to specify class scope
}
}
Существуют некоторые системно-определенные константы, которые существуют только в более новых версиях PHP, например параметр режима константы для round()
, такие как PHP_ROUND_HALF_DOWN
, существуют только в PHP 5.3 или новее.
Итак, если вы попытались использовать эту функцию в PHP 5.2, скажите:
$rounded = round($my_var, 0, PHP_ROUND_HALF_DOWN);
Вы получите это сообщение об ошибке:
Использование неопределенной константы PHP_ROUND_HALF_DOWN - предполагается 'PHP_ROUND_HALF_DOWN' Предупреждение (2): Неверный параметр count для round ()
BLOCKQUOTE>