Pesan kesalahan disebabkan oleh fakta yang tidak menguntungkan bahwa PHP secara implisit akan mendeklarasikan token yang tidak dikenal sebagai string konstan dengan nama yang sama.
Artinya, ia mencoba menafsirkan ini (perhatikan tanda kutip yang hilang):
$_POST[department]
Satu-satunya cara yang valid untuk sintaks yang valid dalam PHP adalah jika sebelumnya ada konstanta yang department
didefinisikan. Sedihnya, daripada mati dengan kesalahan fatal pada saat ini, ia mengeluarkan Pemberitahuan ini dan bertindak seolah-olah sebuah konstanta didefinisikan dengan nama dan nilai yang sama:
// Implicit declaration of constant called department with value 'department'
define('department', 'department');
Ada berbagai cara Anda bisa mendapatkan pesan kesalahan ini, tetapi semuanya memiliki akar penyebab yang sama - token yang bisa berupa konstanta.
Kutipan string hilang: $my_array[bad_key]
Inilah masalahnya dalam kasus Anda, dan itu karena Anda punya kunci larik string yang belum dikutip. Memperbaiki kunci string akan memperbaiki bug:
Perubahan:
$department = mysql_real_escape_string($_POST[department]);
...(etc)...
Untuk:
$department = mysql_real_escape_string($_POST['department']);
...(etc)...
Variabel tanda dolar hilang: var_without_dollar
Alasan lain Anda mungkin melihat pesan kesalahan ini adalah jika Anda mengabaikan $
variabel, atau $this->
dari anggota. Misalnya, salah satu dari yang berikut ini akan menyebabkan pesan kesalahan yang serupa:
my_local; // should be $my_local
my_member; // should be $this->my_member
Karakter tidak valid dalam nama variabel: $bad-variable-name
Masalah serupa namun lebih halus dapat terjadi jika Anda mencoba menggunakan karakter yang tidak diizinkan dalam nama variabel - tanda hubung ( -
) alih-alih garis bawah _
akan menjadi kasus umum.
Misalnya, ini OK, karena garis bawah dibolehkan dalam nama variabel :
if (123 === $my_var) {
do_something();
}
Tapi ini bukan:
if (123 === $my-var) {
do_something();
}
Ini akan ditafsirkan sama dengan ini:
if (123 === $my - var) { // variable $my minus constant 'var'
do_something();
}
Mengacu pada konstanta kelas tanpa menentukan lingkup kelas
Untuk merujuk pada konstanta kelas, Anda perlu menentukan ruang lingkup kelas ::
, jika Anda melewatkannya, PHP akan berpikir Anda sedang berbicara tentang global define()
.
Misalnya:
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
}
}
Menggunakan konstanta yang tidak didefinisikan dalam versi PHP ini, atau didefinisikan dalam ekstensi yang tidak diinstal
Ada beberapa konstanta yang ditentukan sistem yang hanya ada di versi PHP yang lebih baru, misalnya konstanta opsi mode round()
seperti yang PHP_ROUND_HALF_DOWN
hanya ada di PHP 5.3 atau lebih baru.
Jadi jika Anda mencoba menggunakan fitur ini di PHP 5.2, katakan:
$rounded = round($my_var, 0, PHP_ROUND_HALF_DOWN);
Anda akan menerima pesan kesalahan ini:
Penggunaan konstanta yang tidak terdefinisi PHP_ROUND_HALF_DOWN - diasumsikan 'PHP_ROUND_HALF_DOWN' Peringatan (2): Jumlah parameter salah untuk putaran ()