
日期:2007-06-18 作者:喜騰小二 來源:PHPChina
PHP變數
PHP3支援下麵類型的變數:
(一)、內部變數
主要有整數(interger),浮點數(float-point numbers),字串(string),陣列(array),物件(object)。
1
初始化變數
要在PHP中初始化變數, 妳只要簡單的給它賦值即可。對於大多數類型,這是最直接的。對於陣列和物件,可以使用其它方法。
2
初始化陣列
陣列可以使用這兩種方法之一來賦值: 使用一係列連續數值,或使用array()函式構造 (見 Array functions 部分)。
要將連續的數值加進陣列,妳隻需將要賦值賦給不帶下標的陣列變數。該值會作為陣列的最後元素加進陣列中。
例: $names[] =
"Jill"; // $names[0] = "Jill" $names[] = "Jack"; // $names[1] = "Jack"
與c、perl相似,
陣列下標也是從0開始。
3 初始化物件
要初始化一個物件,需用new陳述式建立該類型的變數。
class foo {
function do_foo() {
echo "Doing
foo."; } } $bar = new foo; $bar->do_foo();
4
變數作用域
變數的作用域就是它的有效範圍。對於大多數PHP的變數隻有一個作用域。在使用者自訂函式裡采用局部變數作用域。
函式內使用的變數被預設設定為局部變數。例如: $a=1; /* global scope */
Function
Test() { echo $a; /* reference to local scope variable */ }
Test(); 這段程式不會輸出任何的東西,因為echo陳述式要輸出局部變數 $a ,而函式內的 $a 從未被賦過值。
妳可能注意到這和C語言有點小小的區別,C中全域變數可以直接在函式內引用,除非它被一個局部變數所覆蓋。
而這使得人們可能不注意修改了全域變數的值。在PHP中要在函式內部使用全域變數必須顯式的幫助。
例如: $a=1;
$b=2; Function Sum() { global $a,$b;
$b =
$a + $b; } Sum(); echo $b; 上麵程式將輸出"3"。
透過在函式內部宣告$a和$b是全域變數,所要變數都參考全域。一個函式可以操縱的全域變數的數量沒有限制。
作用域的另外一個值得注意的地方是static 變數。
一個 static變數存在於局部函式中,但當程式離開這個函式時它的值不會丟失。
考慮下麵的例子: Function Test() { $a=0; echo $a; $a++;
}
這個函式是沒用的,因為每次調用時它都先把$a賦為 0 然後打出"0"。 對$a++的自加沒有任何效果因為函式調用結束後變數
$a 就被釋放了。要使記數程式有效記數而不丟掉當前的記數結果,$a 要聲名為static變數:
Function Test() {
static $a=0; echo $a; $a++;
}
現在,每次調用Test()函式它都會打出$a的值並把增加它的值。 當使用遞迴函式時靜態變數是必不可少的。
遞迴函式就是調用自己的函式。寫遞迴函式時一定要十分小心,
因為它的迴圈次數不確定。妳必須確保有足夠的條件結束遞迴過程。下麵是一個簡單的遞迴函式記數到10:
Function Test() {
static $count=0; $count++;
echo $count;
if($count < 10) { Test(); } }
(二) 動態變數
有時使用可變的變數名比較方便。就是說,一個能夠被動態賦值和使用的變數名。
一個普通變數的賦值陳述式如: $a = "hello";
一個動態變數引用該變數的值作為一個新變數的名字。
在上麵例中, hello,可以透過雙$用做變數名。
例: $$a =
"world"; 至此,兩個變數被定義並存貯在PHP符號樹中: $a 的內容是"hello",$hello 的內容是 "world"。
因此,陳述式:
echo "$a ${$a}"; 的顯示結果完全等同於: echo "$a $hello"; (三)PHP外部變數 1、HTML表單(GET和POST)
當一個表單提交給PHP3 script時,PHP會自動得到表單中的變數。例如:
Name:
當按下”submit”後,PHP3會自動產生變數:$name,其中包含了使用者輸入的所有內容。 2、IMAGE SUBMIT 變數名
當提交一個表單時,可以透過下麵標記用一副圖代替標準的提交按鈕: 當使用者按該圖時,
兩個附加變數sub_x和sub_y就會伴隨表單一起送到server上。其中包含了使用者在圖上按處的坐標。
有經驗的人可能注意到浏覽器實際送出的名字包含一個句號而不是底線,但PHP自動將句號轉換成了底線。
3、HTTP Cookies
PHP支援HTTP cookies。Cookies在用戶端浏覽器存儲資料,以此和使用者保持聯絡或驗證使用者身份。
妳可以使用setcookie()
函式來設定cookies。 Cookies是HTTP請求頭的一部分,所以必須在任何輸出資料返回給使用者浏覽器前
調用SetCookie()函式。它類似於
Header() 函式的限制。任何使用者端返回的cookies都將被自動轉換為標準的PHP變數,
就象GET和POST方法的資料。
如果要在一個 cookie中設定多個值,要給這個cookie的名字加上 [] ,
例如:
SetCookie("MyCookie[]","Testing", time()+3600);
注意:新的cookie將覆蓋掉妳的浏覽器中已有的同名cookie,除非它們俱有不同的路徑或域。
4、環境變數
PHP自動將環境變數轉換為普通的變數。
echo $HOME; /* Shows the HOME environment
variable, if set. */
儘管來自GET,POST 及 Cookie結構的資訊也會被自動轉化為PHP的變數,
但最好明確的從環境變數中讀取它們以確保獲得正確的值。
為此可使用 getenv() 函式。也可以透過 putenv() 函式設定變數。
變數類型轉換
PHP中不需要(也不支援)在變數定義時做顯式的類型宣告;一個變數的類型取決於它的值的類型。
也就是說,如果妳給變數var 賦了一個字串值,var 就成為字串變數。如果妳又賦了一個整型值給var, 它就變成了一個整型變數。
一個PHP自動類型轉換的例子是加法運運算元 '+'。如果任何一個操作數是double型,則所有的操作數按 double類型來計算,
結果也是double型的。否則,所有的操作數按integer類型來計算, 結果也是integer型的。注意:操作數本身的類型不發生變化;
類型變換僅在計算時做 $foo = "0"; // $foo is a string (ASCII 48) $foo++; //
$foo is the string "1" (ASCII 49)
$foo += 1; // $foo is now an integer
(2) $foo = $foo + 1.3; // $foo is now a double (3.3)
$foo = 5 + "10
Little Piggies"; // $foo is a double (15) $foo = 5 + "10 Small Pigs"; //
$foo is an integer (15)
要改變變數的類型,也可用settype() 函式。
1、強制類型轉換
PHP中的強制類型轉換和C中一樣: 在需要進行類型強制轉換的變數前的括弧中寫出想要的類型名。
$foo = 10; // $foo is
an integer $bar = (double) $foo; // $bar is a double
允許的強制轉換是:
(int), (integer) - cast to integer (real), (double), (float) - cast to
double
(string) - cast to string (array) - cast to array
(object) - cast to object
注意:括弧中可以含有tab或空格,下麵的函式將被計算: $foo = (int)
$bar; $foo = ( int ) $bar;
2、字串轉換
當字串作為數值類型計算時,結果的值和類型按以下方式決定。
如果字串中包含任何'.', 'e',及'E'字元,則被作為double類型計算。否則,就作為integer類型計算。
該值從字串最開始算起。如果字串是合法的數字,則使用該值,否則值為 0 。
合法的數字是一個符號位(可選),後跟一位或幾位數字(也可含有一個十進位的小數點), 後跟一位可選的指數。
指數是一個 'e' 或
'E'後跟一個或幾個數字。 $foo = 1 + "10.5"; // $foo is a double (11.5)
$foo = 1 +
"-1.3e3"; // $foo is a double (-1299) $foo = 1 + "bob-1.3e3"; // $foo is a
double (1)
$foo = 1 + "bob3"; // $foo is an integer (1) $foo = 1 + "10
Small Pigs"; // $foo is an integer (11)
$foo = 1 + "10 Little Piggies";
// $foo is a double (11); the string contains 'e'