PHP错误信息“注意:使用未定义的常量”是什么意思?
PHP在日志中写入这个错误:“注意:使用未定义的常量”。
日志中的错误:
PHP Notice: Use of undefined constant department - assumed 'department' (line 5)
PHP Notice: Use of undefined constant name - assumed 'name' (line 6)
PHP Notice: Use of undefined constant email - assumed 'email' (line 7)
PHP Notice: Use of undefined constant message - assumed 'message' (line 8)
相关的代码行:
$department = mysql_real_escape_string($_POST[department]);
$name = mysql_real_escape_string($_POST[name]);
$email = mysql_real_escape_string($_POST[email]);
$message = mysql_real_escape_string($_POST[message]);
这是什么意思,为什么我看到它?
你应该引用你的数组键:
$department = mysql_real_escape_string($_POST['department']);
$name = mysql_real_escape_string($_POST['name']);
$email = mysql_real_escape_string($_POST['email']);
$message = mysql_real_escape_string($_POST['message']);
因为它正在寻找称为department
, name
, email
, message
等的常量。当它找不到这样一个常量时,PHP(奇怪地)将它解释为一个字符串('department'等)。 显然,如果稍后定义了这样一个常量,这很容易中断(尽管使用小写常量是不好的方式)。
该错误消息是由于不幸的事实,即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()
的mode选项常量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()的参数数量错误
你可能忘了用""
。
举个例子:
$_array[text] = $_var;
改成:
$_array["text"] = $_var;
链接地址: http://www.djcxy.com/p/11881.html
上一篇: What does the PHP error message "Notice: Use of undefined constant" mean?