PHP中的變量用一個美元符號后面跟變量名來表示。變量名是區分大小寫的,并且出現中文可能也是合法的。
變量默認總是傳值賦值。PHP也提供了另外一種方式給變量賦值:引用賦值。這意味著新的變量簡單的引用(換言之,"成為其別名" 或者 "指向")了原始變量。改動新的變量將影響到原始變量,反之亦然。使用引用賦值,簡單地將一個&符號加到將要賦值的變量前(源變量)。注意,只有有名字的變量才可以引用賦值。
預定義變量PHP擁有大量預定義變量,許多變量依賴與服務器,某些預定義變量以命令行形式運行時并不生效。
PHP提供了一套附加的預定數組,這些數組變量包含了來自web服務器(如果可用),運行環境,和用戶輸入的數據,通常被稱為自動全局變量(autoglobals)或者超全局變量(superglobals)。
變量范圍這里的變量范圍指的是,它定義的上下文背景,也就是它的生效范圍。變量的范圍包含了include和require引入的文件。
PHP的全局變量和C語言有一點點不同,在C語言中,全局變量在函數中自動生效,除非被局部變量覆蓋。PHP中全局變量在函數中使用時必須聲明為global。
<?php $a = 'hello';function test() {var_dump($a);}// test();include 'b.inc';b.inc內容如下:
<?php echo 'hello';?>該程序能夠正常輸出hello,但是被注釋掉的test()不能正常解析,因為變量$a是未定義的。
若在某個函數中想使用全局變量,可以通過下面兩種方式。
global $a, $b;在函數中聲明全局變量后,對任一變量的所有引用都會指向其全局版本。
$GLOBALS['b'] = $GLOBALS['a'] + $BLOBALS['b'];用法同global關鍵字相似。
靜態變量靜態變量僅在局部函數域中存在,但當程序執行離開此作用域時,其值并不丟失。并且,只在聲明時初始化一次,每次調用函數并不會覆蓋靜態函數的值。
靜態變量在聲明中用表達式的結果對其賦值會導致解析錯誤,靜態聲明是在編譯時解析的。
<?php function test() {static $cnt = 0;echo $cnt;$cnt++;if($cnt < 10) {test();}$cnt--;}test();和C語言的static相似,下面這段C代碼也可以把0~9十個數字依次輸出。
#include <stdio.h>void test(void) {static int cnt = 0;PRintf("%d ", cnt);cnt++;if(cnt < 10) {test();}cnt--;}int main(void) {test();return 0;}對于變量的static和global定義是以引用的方式實現的。
可變變量可變變量是PHP語言中的一種特殊用法,不知其他語言存不存在。
簡而言之,可變變量就是,一個可變變量獲取了一個普通變量的值作為這個可變變量的變量名。
<?php $a = 'hello';$$a = 'world';echo "$a $$a"; // hello $helloecho "$a ${$a}"; // hello world當可變變量用于數組時,可能會出現模棱兩可的問題。比如,寫下$$a[1],編譯器會報錯的,你想要表達的意思需要用下面兩種方式替換掉。
${$a[1]}$a[1]作為一個變量
${$a}[1]$$a作為一個變量并取出變量中索引為1的值。
當表單提交給PHP腳本時,表單中的信息自動在腳本中可用,可以通過$_GET[]、$_POST[]和$_REQUEST[]訪問。
注意,變量名中的點和空格被轉換成下劃線。例如<input name="a.b">變成了$_REQUEST["a_b"],下面的示例中展示了表單中標識符的使用。
<form action="process.php" method="post"><input name="my.text" type="text"><input name="my text" type="text"><input name="my_text" type="text"><input type="submit"></form>表單處理文件process.php。
<?php var_dump(isset($_POST['my.text']));var_dump(isset($_POST['mytext']));var_dump(isset($_POST['my_text']));var_dump($_POST['my_text']);因為句點不是PHP變量名中的合法字符,輸出結果如下所示。
boolean falseboolean falseboolean truestring 'h3' (length=2)magic_quotes_gpc配置指令影響到get/post/cooie的值,這個特性已經廢棄移除,輸入中的單引號、雙引號、反斜杠和NULL字符都不會被轉義。若需要轉義可使用addslashes(),若需要反引用一個引用的字符串需要使用stripslashes()。
PHP也懂得表單變量上下文中的數組,下面的例子使用了更復雜的表單變量,并將表單post給自己并在提交時顯示數據。
<?php if(isset($_POST['action'])) {var_dump($_POST);} else {$page = $_SERVER['PHP_SELF'];$s = <<<STR<form action="{$_SERVER['PHP_SELF']}" method="post"><input type="text" name="personal[name]"><input type="text" name="personal[detail]"><select multiple name="option[]"><option value="a">a</option><option value="b">b</option><option value="c">c</option></select><input type="hidden" name="action" value="submitted"><input type="submit" name="submit"></form>STR;echo $s;}在heredoc中含有復雜變量時要格外小心,上面這段代碼$_SERVER['PHP_SELF']不加花括號會在運行時報錯。
array (size=4) 'personal' => array (size=2) 'name' => string 'hello' (length=5) 'detail' => string 'world' (length=5) 'option' => array (size=2) 0 => string 'a' (length=1) 1 => string 'c' (length=1) 'action' => string 'submitted' (length=9) 'submit' => string '提交查詢內容' (length=12)IMAGE提交當提交表單時,可以用一張圖片代替標準的提交按鈕。第一次使用,真的好神奇。
<?php if(isset($_POST['action'])) {var_dump($_POST);} else {$s = <<<STR<form action="{$_SERVER['PHP_SELF']}" method="post"><input type="hidden" name="action" value="1"><input type="image" src="go.jpg" name="sub"></form>STR;echo $s;}對于上面這段程序,當用戶點擊圖片某處時,表單會傳送到服務器,并加上兩個變量sub_x和sub_y,包含了用戶點擊圖片的坐標。
array (size=3) 'action' => string '1' (length=1) 'sub_x' => string '334' (length=3) 'sub_y' => string '282' (length=3)cookiesPHP可以用setcookie()函數設定cookies,cookies是HTTP信息頭的一部分,因此必須在向瀏覽器發送任何輸出之前調用。
cookie的相關使用如下所示。
<?php if(isset($_COOKIE['cnt'])) {$cnt = $_COOKIE['cnt'] + 1;echo $cnt;} else {$cnt = 1;}setcookie('cnt', $cnt, time() + 3600);cookie數據在相應的cookie數組中可用,如果將多個值賦給一個cookie變量,必須將其賦成數組。
(全文完)
新聞熱點
疑難解答