變量間的傳值方式
總體說明:
1,這里討論的傳值方式是指:一個變量對另一個變量
2,它不僅僅適用于賦值語句,也適用于其他有同樣含義的語句,比如:函數的實參到形參
3,傳值方式只有2種:值傳遞,引用傳遞
4,php中,所有變量,默認都是值傳遞。
5,要想使用引用傳遞,必須使用引用傳遞的符號: &
?
?值傳遞(相互獨立)
是指將一個變量的數據值(數據內容)拷貝一份,然后賦值給另一個變量。
代碼示例:
?
圖示如下:
?
復制完之后,這兩個變量就沒有關系了(互相獨立)!
?
結果為:
?
引用傳值:(相關聯)
是指將一個變量的引用關系拷貝一份,然后賦值給另一個變量,即另一個變量也同樣由該關系決定了指向某個數據:
代碼示例:
?
?
?
圖示如下:
?
?
?
賦值(傳值)完之后,兩個變量指向同樣一個數據。
我們有知道,對變量的操作就是對數據的操作。
則:
對變量v1的操作,改變的數據,也就是體現為v2也發生了改變。
測試:
?
?
結果為:
?
?
另外,在這種引用傳值的情況下,unset一個變量,則另一個跟它有關(指向同樣數據的關系)的變量,并不受影響。
測試:
?
?
?
結果:
?
?
?
可變變量 $$$def;
所謂可變變量,就是一個變量的名,又是一個變量。
可變變量的語法是php的很特殊的語法——其他語言中少見。
$v1 = “abc”; //這是一個字符串變量,其內容是字符串“abc”
$abc = 10; //這是一個普通變量,其內容是數字10
echo ?$$v1; //此時,就是所謂“可變變量”
怎么理解:
1,凡是$符號出現,就會有可能理解為是一個變量
2,這里第一個“$”出現了,則php就視圖將其解釋為一個變量,變量名是$v1;
3,我們有知道,$v1的值是”abc”,
4,那么,第一個“$”符號后面的變量名,就得到為“abc”
5,即:echo 試圖輸出的是變量$abc, 自然是數字10
實際上,理論上,可變變量的嵌套還可以更多,比如:$$$def;
預定義變量
綜述:
1:預定義變量又叫超全局變量,包括:
$_GET, $_POST, $_SERVER, $_REQUEST, $GLOBALS, ?$_COOKIE, $_SESSION, ..........(大約10個)
2:作用域問題
php中,自定義的變量的作用域,分兩種:全局作用域(函數外),局部作用域(函數內)。
但:
預定義變量的作用域稱為“超全局作用域”:全局作用域 + 局部作用域的總和(函數內外全都可用)
3:數據類型問題:
超全局變量都是數組!
$_GET變量(數組):
get這個詞,常常出現在這里:<form ?action=”abc.php”??method=”get”?>.....</form>
這叫做“表單以get方式提交數據”
則$_GET這個預定義數組變量,就是指以這種方式提交的所有數據的集合(數組)
對應來說,也可以以post方式提交數據
注意:get這個詞,似乎沒有中文翻譯。
實際上,在網頁中,以get方式提交數據有多種形式:
形式一:
<form ?action=”abc.php”??method=”get”?>
項目1: <input type=”text”???name=”uName”???/>
項目2: <input type=”password”???name=”uPswd”???/>
<input type=”submit”??value=”提交”??/>
</form>
其作用是:用戶填寫表單數據,并提交后,會將數據發送(提交)給頁面abc.php,其實也可以理解為“打開”該網頁(abc.php),還可以理解為“請求”該網頁(abc.php)
形式二:
<a ?href=”abc.php?uName=test1&uPswd=123”??> 文字。。。</a>
其作用是:用戶點擊鏈接后,會將數據發送(提交)給頁面abc.php,其實也可以理解為“打開”該網頁(abc.php),還可以理解為“請求”該網頁(abc.php),這種請求也是get請求
形式三:
<script>
location.href = “abc.php?uName=test1&uPswd=123”; //利用location對象的屬性href
</script>
其作用是:當該行語句執行的時候(通常其實是在函數中),會將數據發送(提交)給頁面abc.php,其實也可以理解為“打開”該網頁(abc.php),還可以理解為“請求”該網頁(abc.php),這種請求也是get請求
形式四:
<script>
location.assign( “abc.php?uName=test1&uPswd=123”); //利用location對象的方法assign()
</script>
其作用是:當該行語句執行的時候(通常其實是在函數中),會將數據發送(提交)給頁面abc.php,其實也可以理解為“打開”該網頁(abc.php),還可以理解為“請求”該網頁(abc.php),這種請求也是get請求
?
不管哪種形式的get提交過來的數據,獲取數據是一樣的:
(在abc.php網頁中)
<?php
$v1 = $_GET[‘uName’]; //單引號也可以用雙引號,本質是一個字符串,其實是數組的鍵名(下標)
$v2 = $_GET[‘uPswd’]; //該鍵名必須跟提交的時候的名字完全一致(區分大小寫)
?>
?
舉例:
?
?
?
提交后:
?
?