为什么我已经定义了 并且都echo 出来了 编译器依然
Notice: Use of undefined constant userconst - assumed 'userconst' in //后面路径不复制了class UserEntity{
private $username;
private $password;
const userconst = "HuangYuHong"; //常量 用户名+常量再加密往数据库里插
function __construct($u,$p){
$this->username = $u;
$this->password = $p;
}
function register(){
//include("../DB/MySql.php");
echo md5(userconst);                    //12行 编译器说为定义 但是为什么还能输出
echo "|||";
echo md5(userconst);                    //14行
//$database = new MySql();
//$sql = "insert into user_table (username,password) values('".$username."','".$password."')";
//$database->setSQL($sql);
}
function logout(){
echo "注销";
}
function login(){
echo "登录";
}
function usercheck(){
echo "检查用户";
}
}
调用user事例的页面  我以前学JAVA的 按照MVC JSP+SERVLET+JAVABEAN 写的请多指教include("../bean/UserEntity.php");
if($_POST["submit"]){
$username = $_POST["username"];
$password = $_POST["password"];
$user = new UserEntity($username,$password);
$user->register();
}else{
echo "没有提交";
}

解决方案 »

  1.   

    在类里面使用常量self::userconst;
      

  2.   

    访问类常量必须冠以类名,类中可用 self 代替类名echo md5(userconst);                    //12行 编译器说为定义 但是为什么还能输出其中的 userconst 是标量,不能通过严格的语法检查
    虽然能有输出,但结果是不正确的
    你 
    ecoh userconst;
    echo self::userconst;
    就知道了
      

  3.   

    #2 正解
    常量一般要大些,便以区分。
    define("USERCONST",     "userconst");
    CONST USERCONST = "user";常量在类中以调用静态属性的方法调用:
    SELF::USERCONST常量和变量不同: 
    常量前面没有美元符号($);常量只能用 define() 函数定义,而不能通过赋值语句;常量可以不用理会变量范围的规则而在任何地方定义和访问;常量一旦定义就不能被重新定义或者取消定义;常量的值只能是标量。
      

  4.   

    范围解析操作符(::)范围解析操作符(也可称作 Paamayim Nekudotayim)或者更简单地说是一对冒号,可以用于访问静态成员、方法和常量,还可以用于覆盖类中的成员和方法。当在类的外部访问这些静态成员、方法和常量时,必须使用类的名字。把 Paamayim Nekudotayim 选作该操作符的名字似乎有些奇怪。然而,这是 Zend 开发小组在写 Zend Engine 0.5 (被用于 PHP 3 中)时所作出的决定。事实上这个词在希伯莱文就是双冒号的意思。Example #1 在类的外部使用 :: 操作符
    <?php
    class MyClass {
        const CONST_VALUE = 'A constant value';
    }echo MyClass::CONST_VALUE;
    ?>
    self 和 parent 这两个特殊的关键字是用于在类的内部对成员或方法进行访问的。Example #2 :: from inside the class definition
    <?php
    class OtherClass extends MyClass
    {
        public static $my_static = 'static var';    public static function doubleColon() {
            echo parent::CONST_VALUE . "\n";
            echo self::$my_static . "\n";
        }
    }OtherClass::doubleColon();
    ?>
    当一个子类覆盖其父类中的方法时,PHP 不会再执行父类中已被覆盖的方法,直到子类中调用这些方法为止。这种机制也作用于 构造函数和析构函数、重载 及 魔术 函数。Example #3 调用父类的方法
    <?php
    class MyClass
    {
        protected function myFunc() {
            echo "MyClass::myFunc()\n";
        }
    }class OtherClass extends MyClass
    {
        // 覆盖父类中的方法
        public function myFunc()
        {
            // 但仍然可以调用已被覆盖的方法
            parent::myFunc();
            echo "OtherClass::myFunc()\n";
        }
    }$class = new OtherClass();
    $class->myFunc();
    ?>