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']);

因为它正在寻找称为departmentnameemailmessage等的常量。当它找不到这样一个常量时,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?

下一篇: Failed to open stream : No such file or directory