php 类定义常量 报错,PHP中类常量的使用

使用YII的时候,我在一个model中声明了一个常量:

const POST_STATUS_DRAFT = "drapt";

然后在用YII的CDBCriteria中使用了它(如下所示),结果一直报错。

$criteria = new CDBCriteria;

$criteria->addcondition("post_status not like :postStatus");

$criteria->params[':postStatus'] = POST_STATUS_DRAFT;

报错内容如下:

The system is unable to find the requested action "error". (D:\wamp\Apache24\htdocs\yii\framework\web\CController.php:483)

#0 D:\wamp\Apache24\htdocs\yii\framework\web\CController.php(270): CController->missingAction('error')

#1 D:\wamp\Apache24\htdocs\yii\framework\web\CWebApplication.php(282): CController->run('error')

#2 D:\wamp\Apache24\htdocs\yii\framework\base\CErrorHandler.php(368): CWebApplication->runController('site/error')

#3 D:\wamp\Apache24\htdocs\yii\framework\base\CErrorHandler.php(296): CErrorHandler->renderError()

#4 D:\wamp\Apache24\htdocs\yii\framework\base\CErrorHandler.php(133): CErrorHandler->handleError(Object(CErrorEvent))

#5 D:\wamp\Apache24\htdocs\yii\framework\base\CApplication.php(824): CErrorHandler->handle(Object(CErrorEvent))

#6 D:\wamp\Apache24\htdocs\blog\protected\models\Posts.php(238): CApplication->handleError(8, 'Use of undefine...', 'D:\\wamp\\Apache2...', 238, Array)

#7 D:\wamp\Apache24\htdocs\blog\protected\controllers\PostsController.php(148): Posts::getPostsByType(NULL)

#8 [internal function]: PostsController->actionIndex(NULL)

#9 D:\wamp\Apache24\htdocs\yii\framework\web\actions\CAction.php(109): ReflectionMethod->invokeArgs(Object(PostsController), Array)

#10 D:\wamp\Apache24\htdocs\yii\framework\web\actions\CInlineAction.php(47): CAction->runWithParamsInternal(Object(PostsController), Object(ReflectionMethod), Array)

#11 D:\wamp\Apache24\htdocs\yii\framework\web\CController.php(308): CInlineAction->runWithParams(Array)

#12 D:\wamp\Apache24\htdocs\yii\framework\web\filters\CFilterChain.php(133): CController->runAction(Object(CInlineAction))

#13 D:\wamp\Apache24\htdocs\yii\framework\web\filters\CFilter.php(40): CFilterChain->run()

#14 D:\wamp\Apache24\htdocs\yii\framework\web\CController.php(1145): CFilter->filter(Object(CFilterChain))

#15 D:\wamp\Apache24\htdocs\yii\framework\web\filters\CInlineFilter.php(58): CController->filterAccessControl(Object(CFilterChain))

#16 D:\wamp\Apache24\htdocs\yii\framework\web\filters\CFilterChain.php(130): CInlineFilter->filter(Object(CFilterChain))

#17 D:\wamp\Apache24\htdocs\yii\framework\web\CController.php(291): CFilterChain->run()

#18 D:\wamp\Apache24\htdocs\yii\framework\web\CController.php(265): CController->runActionWithFilters(Object(CInlineAction), Array)

#19 D:\wamp\Apache24\htdocs\yii\framework\web\CWebApplication.php(282): CController->run('index')

#20 D:\wamp\Apache24\htdocs\yii\framework\web\CWebApplication.php(141): CWebApplication->runController('posts/index')

#21 D:\wamp\Apache24\htdocs\yii\framework\base\CApplication.php(184): CWebApplication->processRequest()

#22 D:\wamp\Apache24\htdocs\blog\index.php(13): CApplication->run()

#23 {main}

报错内容太长,当时不想看,自己去找错,方向一直在YII框架的CDBCriteria类使用错误上,结果找了半天才发现是类常量的问题。代码修改成下面的就可以了:

$criteria = new CDBCriteria;

$criteria->addcondition("post_status not like :postStatus");

$criteria->params[':postStatus'] = self::POST_STATUS_DRAFT;//加上了self::

最后顺便温习了PHP中常量的知识:

1、常量定义

定义格式如下:

boolean define(string name, mixed value [, bool case_insensitive]);

name:常量名,一般字母全部大写,单词之间用下划分割开。默认区分大小写,可以通过case_insensitive来设置。

value:常量的值

case_insensitive:设置是否区分大小写,case_insensitive为true时表示不区分大小写

例子:

define("CON_INT",29);

2、常量使用

例子:

echo CON_INT;

3、在类中定义和使用常量

class MyClass{

const CON_INT = 12;//类中定义常量

public function getCon(){

echo self::CON_INT;//类中使用常量

}

}

echo MyClass::CON_INT;//类外使用常量

4、注意事项

1)常量一旦定义,就不能取消定义。

2)常量作用域是全局的。

3)在类中定义常量一定要用const,不能用define

4)在类中使用常量一定要加上“self::”,类外使用要用“类名 ::”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值