我们通常把不经常变的值定义成常量,常量一般用全部大写来表示,前面不加美元符号,也可减少团队开发的出错。那么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 作用域名
1、在函数内部使用global关键字定义的变量可以成为全局变量,如果该变量已经被定义了,那么他的值就是原来的值,否则就是一个新的全局变量(一句话:已存在就不再创建)
输出结果:
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)