浅谈PHP中的常量和变量

一、PHP中定义常量define与const

我们通常把不经常变的值定义成常量,常量一般用全部大写来表示,前面不加美元符号,也可减少团队开发的出错。那么define和const有什么区别呢?

1、const是一个语言结构;而define是一个函数,可以通过第三个参数来指定是否区分大小写。true表示大小写不敏感,默认为false

define('PI', 3.14, true);

2、const简单易读,编译时要比define快很多。

3、const可在类中使用,用于类成员常量定义,定义后不可修改;define不能在类中使用,可用于全局变量

class MyClass
{
    const CONS = '常量值';

    function showConstant() {
        echo  self::CONS . PHP_EOL;
        echo  constant('CONS');      
    }
}

 

4、const是在编译时定义,因此必须处于最顶端的作用区域,不能在函数,循环及if条件中使用;而define是函数,也就是能调用函数的地方都可以使用

if (...){
const FOO = 'BAR';    // 无效的invalid
}
if (...) {
define('FOO', 'BAR'); // 有效的valid
}

5、const只能用普通的常量名,define常量名中可以有表达式

const  FOO = 'BAR';
for ($i = 0; $i < 32; ++$i) {
define('BIT_' . $i, 1 << $i);
}

6、const定义的常量只能是静态常量,define可以是任意表达式

const BIT_5 = 1 << 5;    // valid since PHP 5.6
define('BIT_5', 1 << 5); // 有效的valid

二 、变量,global  、local 和  static 作用域名

global,local,static的区别

1、在函数内部使用global关键字定义的变量可以成为全局变量,如果该变量已经被定义了,那么他的值就是原来的值,否则就是一个新的全局变量(一句话:已存在就不再创建)

 <?php
 2     $a=1;
 3     function run(){
 4         global $a;
 5         $a=10;
 6         $a++;
 7     }
 8     run();
 9     echo "Global variable a=$a \n";
10     $b=100;
11     function run1(){
12         $b=10;
13         $b+=10;
14     }
15     run1();
16     echo "variable b=$b\n";
17     function run2(){
18         global $c;
19         $c=10;
20         function innerRun0(&$c){
21             $c=20;
22         }
23         innerRun0($c);
24         var_dump($c);
25         function innerRun1(){
26            global $c;
27             $c=30;
28         }
29         innerRun1();
30         var_dump($c);
31     }
32     run2();
33     ?>

输出结果:

Global variable a=11

variable b=100

int(20)

int(30)

2、2.static和c语言中的static使用方式是一样的,函数中使用它之后,当函数执行完毕之后,该变量的空间不会被立即回收,而且只被初始化一次:

function run(){
2         static $a=10;
3         $a++;
4         var_dump($a);
5     }
6     run();
7     run();
8     run();

输出结果。

int(11)

int(12)

int(13)

3、local顾名思义,就是局部变量。在函数内部声明得得变量就是局部量量,意思就是他的访问范围是在该函数内部。对应的是global变量,实在函数外部定义的变量,可以全局访问,如果在一个函数内部想要访问到全局变量的话可以使用global,具体方式上面已经提到;还可以使用GLOBALS['globalValueName']。

四、global和$GLOBALS  的区别

但是得到的结果依然为:"myname is" ,原因是global的用法不对。

1、global的正确用法是:"在一个函数中引入外部的一个变量,如果该变量没有通过参数传递进来,那么就通过global引入进来。" 也就是说,当一个函数引用一个外部变量时,可以在函数内通过global来声明该变量,这样该变量就可以在函数中使用了(相当于当作参数传递进来)

2、$GLOBALS : 一个包含了全部变量的全局组合数组   

https://www.cnblogs.com/guanking19/p/5468276.html) 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值