文档章节

PHP中类常量的使用

l
 lgx123
发布于 2016/06/11 15:09
字数 758
阅读 21
收藏 0

使用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::”,类外使用要用“类名 ::”。

 

 

© 著作权归作者所有

l
粉丝 0
博文 3
码字总数 2104
作品 0
广州
私信 提问
PHP之新手自学基础知识(六)——拓展篇之命名空间

命名空间概述 什么是命名空间?从广义上来说,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮...

天谴残魂
2018/01/09
0
0
PHP常量详解:define和const的区别

常量和变量有如下不同: ·常量前面没有美元符号($); ·常量只能用 define() 函数定义,而不能通过赋值语句; ·常量可以不用理会变量的作用域而在任何地方定义和访问; ·常量一旦定义就...

王永濤
2015/11/03
1K
0
PHP 手册学习-基础语法

基本语法 PHP 标记、分割符、注释 当解析一个文件时,PHP 会寻找起始和结束标记,也就是 <?php 和 ?>,在 HTML 中分离出 PHP代码; 指令分割符:同 C 或 Perl 一样,PHP 需要在每个语句后用分...

SibylY
2016/02/22
28
0
PHP_define和const的区别/获取所有常量get_defined_constant()

常量是一个简单值的标识符(名字)。如同其名称所暗示的,在脚本执行期间该值不能改变(除了所谓的魔术常量,它们其实不是常量)。常量默认为大小写敏感。通常常量标识符总是大写的。 可以用...

喵王不瞌睡
2014/11/27
2.7K
2
PHP(三)变量、常量

变量即值不断变化的数据。 常量即值恒定不变的数据。 变量的类型转换 在PHP中,变量的类型是可以任意转换的,变量定义时不需要明确的类型定义,变量的类型是根据上下文来决定的,当 $sivir 被...

ChuckleLiu
2015/12/21
93
2

没有更多内容

加载失败,请刷新页面

加载更多

一起来学Java8(四)——复合Lambda

在一起来学Java8(二)——Lambda表达式中我们学习了Lambda表达式的基本用法,现在来了解下复合Lambda。 Lambda表达式的的书写离不开函数式接口,复合Lambda的意思是在使用Lambda表达式实现函...

猿敲月下码
16分钟前
6
0
debian10使用putty配置交换机console口

前言:Linux的推广普及,需要配合解决实际应用方能有成效! 最近强迫自己用linux进行实际工作,过程很痛苦,还好通过网络一一解决,感谢各位无私网友博客的帮助! 系统:debian10 桌面:xfc...

W_Lu
47分钟前
10
0
aelf Enterprise 0.8.0 beta有奖公测,“Bug奖金计划”重磅开启

2019年9月30日,aelf Enterprise 0.8.0 beta版正式发布。aelf Enterprise 0.8.0 beta是一个完备的区块链系统, 包含完备的区块链系统、开发套件、开发文档、以及配套的基础应用和基础服务。 ...

AELF开发者社区
48分钟前
8
0
oracle 初始化数据库脚本

create user lpf identified by 123456; create tablespace lpf_ts_cms datafile '/opt/app/oracle/product/11.2.0/lpf.dbf' size 200M; alter user lpf default tablespace lpf_ts_cms; sel......

internetafei
53分钟前
8
0
深入了解Redis底层数据结构

说明 说到Redis的数据结构,我们大概会很快想到Redis的5种常见数据结构:字符串(String)、列表(List)、散列(Hash)、集合(Set)、有序集合(Sorted Set),以及他们的特点和运用场景。不过它们是...

TurboSanil
53分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部