错误消息是由于不幸的事实,PHP将隐式地将未知标记声明为同名的常量string。
也就是说,它试图解释这个(注意缺less的引号):
$_POST[department]
唯一有效的方法是在PHP中有效的语法,如果以前有一个常量department定义。 所以,可悲的是,与此同时,不致死于致命的错误,它发布了这个通知,就好像一个常数已经被定义为具有相同的名称和值:
// Implicit declaration of constant called department with value 'department' define('department', 'department');
有多种方法可以得到这个错误消息,但是它们都有相同的根本原因 – 一个可能是一个常量的标记。
string缺less引号: $my_array[bad_key]
这就是你的情况,这是因为你有没有被引用的string数组键。 修复string键将修复错误:
更改:
$department = mysql_real_escape_string($_POST[department]); ...(etc)...
至:
$department = mysql_real_escape_string($_POST['department']); ...(etc)...
variables缺less美元符号: var_without_dollar
你可能会看到这个错误消息的另一个原因是,如果你从variables中取消$ ,或者从成员中取消$this-> 。 例如,以下任一情况都会导致类似的错误消息:
my_local; // should be $my_local my_member; // should be $this->my_member
variables名称中的字符无效: $bad-variable-name
如果您尝试在variables名中使用不允许的字符,则会导致类似但更细微的问题 – 连字符( - )而不是下划线_将是常见情况。
例如,这是可以的,因为在variables名称中允许使用下划线 :
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()的参数数量错误