このエラーメッセージは、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の新しいバージョンモードオプション定数存在するいくつかのシステム定義の定数である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):round()のパラメーター数が間違っています