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