• PHP读书笔记(3)-常量


    什么是常量

            什么是常量?常量可以理解为值不变的量 ;或者是常量值被定义后,在脚本的其他任何地方都不可以被改变。手册上是这么定义PHP的常量:常量是一个简单值的标识符(名字)。如同其名称所暗示的,在脚本执行期间该值不能改变(除了所谓的魔术常量,它们其实不是常量)。常量默认为大小写敏感。传统上常量标识符总是大写的。

           常量名和其它任何 PHP 标签遵循同样的命名规则。合法的常量名以字母或下划线开始,后面跟着任何字母,数字或下划线。用正则表达式是这样表达的:[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*

          PHP中的常量分为自定义常量和系统常量

          自定义常量是根据我们开发的需要,而定义的常量,它通过使用PHP中的函数define()定义。

          在 PHP 5.3.0 以后,可以使用 const 关键字在类定义之外定义常量。一个常量一旦被定义,就不能再改变或者取消定义。

    常量只能包含标量数据(boolean,integer,float 和string)。可以定义resource 常量,但应尽量避免,因为会造成不可预料的结果。

           可以简单的通过指定其名字来取得常量的值,与变量不同,不应该在常量前面加上$ 符号。如果常量名是动态的,也可以用函数constant() 来获取常量的值。用get_defined_constants() 可以获得所有已定义的常量列表。

            第二个参数“value”为必选参数,它是常量的值。

            第三个参数“case_sensitive”为可选参数,指定是否大小写敏感,设定为true表示不敏感,一般不指定第三个参数的情况下,默认第三个参数的值为false。

    (注: string表示参数类型为字符串类型,mixed表示参数类型可以接受为多种不同的类型,case_sensitive = true表示默认为布尔类型TRUE)


    常量有什么用呢?

           常量主要功效是可以避免重复定义,篡改变量值。在我们进行团队开发时,或者代码量很大的时候,对于一些第一次定义后不改变的量,如果我们使用变量,在不知情的情况下,使用同一变量名时,变量值就会被替换掉,从而会引发服务器执行错误的任务。

           此外,使用常量还能提高代码的可维护性。如果由于某些原因,常量的值需要变更时候,我们只需要修改一个地方。例如在做计算中,起初我们取圆周率为 3.14,于是很多计算中我们都使用3.14进行计算,当要求计算精度提高,圆周率需要取3.142的时候,我们不得不修改所有使用3.14的代码,倘若 代码量比较多时,不仅工作量大,还可能遗漏。

    感受一下常量的优势!

    1 <?php
    2   define("PI",3.14);
    3   $r=3;
    4   echo "面积为:".(PI*$r*$r)."<br />";
    5   echo "周长为:".(2*PI*$r)."<br />";
    6 ?>

    认识一下系统常量

    几个 PHP 的"魔术常量"
    名称说明
    __LINE__ 文件中的当前行号。
    __FILE__ 文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径。
    __DIR__ 文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增) =
    __FUNCTION__ 函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。
    __CLASS__ 类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。类名包括其被声明的作用区域(例如 FooBar)。注意自 PHP 5.4 起 __CLASS__ 对 trait 也起作用。当用在 trait 方法中时,__CLASS__ 是调用 trait 方法的类的名字。
    __TRAIT__ Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4 起此常量返回 trait 被定义时的名字(区分大小写)。Trait 名包括其被声明的作用区域(例如 FooBar)。
    __METHOD__ 类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。
    __NAMESPACE__ 当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。

    常量如何取值

           定义了常量,那么就要使用常量,那么如何获取常量值呢?

           获取常量值的有两种方法取值。

           第一种是使用常量名直接获取值;例如计算圆周率的面积,如下 :

    1 <?php
    2 define("PI",3.14);
    3 $r=1;
    4 $area = PI*$r*$r; //计算圆的面积
    5 ?>

           第二种是使用constant()函数。它和直接使用常量名输出的效果是一样的,但函数可以动态的输出不同的常量,在使用上要灵活、方便,其语法格式如下:

    mixed constant(string constant_name)
           第一个参数constant_name为要获取常量的名称,也可为存储常量名的变量。如果成功则返回常量的值,失败则提示错误信息常量没有被定义。(注:mixed表示函数返回值类型为多种不同的类型,string表示参数类型为字符串类型)

    如何判定常量是否被定义

    如果常量被重复定义以后,PHP解析器会发出“Constant XXX already defined”的警告,提醒我们该常量已经被定义过。那么,在团队开发,或代码量很大的情况下,我们如何去判定一个常量是否被定义呢?

    defined()函数可以帮助我们判断一个常量是否已经定义,其语法格式为:

    bool defined(string constants_name)

    它只有参数constant_name,指的是要获取常量的名称,若存在则返回布尔类型true,否则返回布尔类型false; (注:bool表示函数返回值类型为布尔类型)

    上一节:PHP读书笔记(2)-变量与数据结构

    下一节:PHP读书笔记(4)-运算符

  • 相关阅读:
    项目启动报错:No suitable driver found for jdbc:oracle:thin:@192.168.7.146:1521:oracle
    (八)Oracle学习笔记—— 触发器
    (七)Oracle学习笔记—— 游标
    spring自动装配(No qualifying bean )
    Intellij output 中文乱码
    使用Spring开发和监控线程池服务
    IDEA在编辑时提示could not autowire
    java 过滤器(Filter)与springMVC 拦截器(interceptor)的实现案例
    Java过滤器(Filter)与SpringMVC拦截器(Interceptor)之间的关系与区别
    idea 添加多模块项目
  • 原文地址:https://www.cnblogs.com/xz1024/p/5626750.html
Copyright © 2020-2023  润新知