エラーメッセージは、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
このエラーメッセージが表示されるもう1つの理由は$
、変数または$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で定義されていない定数、またはインストールされていない拡張機能で定義されている定数を使用する
PHPの新しいバージョンにのみ存在するシステム定義の定数がいくつかあります。たとえば、PHP5.3以降にのみ存在するround()
などのモードオプション定数がありますPHP_ROUND_HALF_DOWN
。
したがって、PHP 5.2でこの機能を使用しようとした場合は、次のように言います。
$rounded = round($my_var, 0, PHP_ROUND_HALF_DOWN);
次のエラーメッセージが表示されます。
未定義の定数の使用PHP_ROUND_HALF_DOWN-想定される'PHP_ROUND_HALF_DOWN'警告(2):round()のパラメーター数が間違っています