PHP中类常量的使用

原创
2016/06/11 15:09
阅读数 57

使用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 评论
0 收藏
0
分享
在线直播报名
返回顶部
顶部