在php中使用未定义的常量

时间:2012-05-01 11:03:58

标签: php

不知道更好的标题,但这是我的代码。

我有类用户在实例化时检查表单数据,但我收到以下错误/通知:

Notice: Use of undefined constant username - assumed 'username' in C:\Users\Jinxed\Desktop\WebTrgovina\app\m\Register\User.m.php on line 7

Notice: Use of undefined constant password - assumed 'password' in C:\Users\Jinxed\Desktop\WebTrgovina\app\m\Register\User.m.php on line 7

Notice: Use of undefined constant passwordc - assumed 'passwordc' in C:\Users\Jinxed\Desktop\WebTrgovina\app\m\Register\User.m.php on line 7

... and so on for every defined variable in user class.

以下是用户类:

class User {
    function __construct(){
        $test = 'blah';
        $username; $password; $passwordc; $name; $surname; $address;
        $this->checkInput(array(username=>20, password=>20, passwordc=>20, name=>20, surname=>40, address=>40));
    }
    //array(formName=>CharacterLimit)
    private function checkInput($fields){
        foreach($fields as $field=>$limit){
            if($_POST[$field]=='' || strlen($_POST[$field])>$limit) $this->error[] = "$field must be filled in, and it must be less than or $limit characters long.";
            else $this->{$field} = $_POST[$field];
        }
    }
}

我不太明白是什么问题,我首先尝试创建变量,而不是从主程序调用checkInput方法,但我得到同样的错误。

1 个答案:

答案 0 :(得分:8)

您应该引用用作数组键的字符串:

$this->checkInput(array(
    'username'=>20,
    'password'=>20,
    'passwordc'=>20,
    'name'=>20,
    'surname'=>40,
    'address'=>40));

documentation说:

  

如果使用未定义的常量,PHP假定您的意思是名称   常量本身,就像你把它称为字符串一样(CONSTANT   vs "CONSTANT")。此时将发出级别E_NOTICE的错误   发生。另请参阅有关$foo[bar]错误原因的手册输入(除非   您首先define() bar作为常量)。