ข้อความแสดงข้อผิดพลาดเกิดจากข้อเท็จจริงที่โชคร้ายที่ 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 เวอร์ชันนี้หรือกำหนดไว้ในส่วนขยายที่ไม่ได้ติดตั้ง
มีค่าคงที่ที่ระบบกำหนดบางอย่างที่มีอยู่ใน 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): นับพารามิเตอร์ผิดสำหรับรอบ ()