一、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)