1.关于普通变量 与 global变量的区别
首先 PHP 是一门松散类型的语言(Loosely Typed Language)。
不需要在设置变量之前声明该变量。
$abc= "123asdasdasd"; echo "<br>"; echo $abc; echo "<br/>"; var_dump($abc); $abc = 234; echo "<br>"; echo $abc; var_dump($abc);
输出你懂的,是123 和 234,变量就像一个盒子 ,我们把东西放进一个名为abc的盒子,盒子只能同时存在一种数据类型
疑问:上面的 $abc= "123asdasdasd"; 不是同时存在 123 和 asdsdasd 这2种数据吗?
不是的 我们用var_dump打印后 发现 是string 类型,也就是字符串类型,因为在php中变量内容凡是打单引号或双引号的,都会被视作字符串去处理
下面的$abc=123;则会看作是数字
在开发过程中 如果要在中间插入代码 就要注意了 ,命名的时候,要看看前面的代码 有没这个名字 ,后面有没用到。如果有就不能起相同的名字了
关于global
<?php $a = 1; $b = 2; function Sum() { global $a, $b; $b = $a + $b; } Sum(); echo $b; ?>
上面这个例子 输出是3
如果我把上面的global $a,$b注释掉会怎么样呢
请看下面例子
<?php $a = 1; $b = 2; function Sum() { //global $a, $b; $b = $a + $b; } Sum(); echo $b; ?>
这个例子 输出的是2
为什么呢?
这是因为$a =1, $b=2; 这里声明的只是局部变量 ,而方法体内和方法体外,是2个不同的作用域.
所以第二个例子中的$b与 方法体无关,可以看作是2个不同的变量。所以得出的是2. 然而 第一个例子 ,我们把$a 和 $b 全局声明后 ,变量就能在该方法体内和方法体外使用,sum操作的也就是$a =1, $b=2的值,所以最后得出3 ,其实依我看,在方法体内用global 声明变量,也可以看作是一个传值的过程。因为如果sum下面还有一个函数需要调用$a,$b 还需要global一次
如果还不明白作用域的问题,可以再看以下例子
<?php $a = 1; $b = 2; function Sum() { //global $a, $b; $b = 5; echo $b; } Sum(); echo "<br/>"; echo $b; ?>
这里输出的是 5 和 2