请教下是phpeclipse的编译错误吗——明明定义了而且输出了还报警告

Java124628022 2012-03-01 11:03:49
为什么我已经定义了 并且都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 "没有提交";
}
...全文
103 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
coder 2012-03-01
  • 打赏
  • 举报
回复
范围解析操作符(::)

范围解析操作符(也可称作 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();
?>
  • 打赏
  • 举报
回复
#2 正解
[Quote=引用楼主 java124628022 的回复:]
const userconst = "HuangYuHong";
[/Quote]
常量一般要大些,便以区分。
define("USERCONST", "userconst");
CONST USERCONST = "user";

常量在类中以调用静态属性的方法调用:
SELF::USERCONST

常量和变量不同:


常量前面没有美元符号($);

常量只能用 define() 函数定义,而不能通过赋值语句;

常量可以不用理会变量范围的规则而在任何地方定义和访问;

常量一旦定义就不能被重新定义或者取消定义;

常量的值只能是标量。
xuzuning 2012-03-01
  • 打赏
  • 举报
回复
访问类常量必须冠以类名,类中可用 self 代替类名

echo md5(userconst); //12行 编译器说为定义 但是为什么还能输出

其中的 userconst 是标量,不能通过严格的语法检查
虽然能有输出,但结果是不正确的

ecoh userconst;
echo self::userconst;
就知道了
黄袍披身 2012-03-01
  • 打赏
  • 举报
回复
在类里面使用常量

self::userconst;

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧