歡迎您光臨本站 註冊首頁

PHP中的常量和變數

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  數字的寫法

數字分為十進位、八進位與十六進位三種寫法:
(1) 1234 - 一般我們習慣的十進位
(2) 01234 - 開頭為 0 (zero) 表示這是一個八進位數字
(3) 0x1234 - 開頭為 0x (zero eks) 表示這是一個十六進位數字
另外,double (浮點數) 的寫法也是和平常的習慣一樣,例如:
-12.3 3.5 7.0001 0.0000054 10000.1
這五個數字都是浮點數正確的寫法。

PHP 也支持科學記號寫法,可用來表示較大或較小的數值,例如:
12.5E-5 (12.5x10-5)
1.3E+3 (1.3x10+3)
分別為 .000125 (0.000125) 與 1300。

字元串的寫法

字元串以單、雙或倒引號圍住分別有不同的義意。
單引號
例如:
$str = 'An apple a day keeps the docter away.'
當字元串出現 ' 符號時,必須加上:
'I'm wing'
應改成:
'I'm wing'
才對,其中 ' 即稱為跳脫字元 (escape character)。

雙引號

以雙引號圍住的字元串 PHP 會對該字元串做 variable interpolation 的動作,亦即做變數的取代:
$name = "Wing";
echo 'Name: $name';
echo "Name: $name";
執行結果為:
Name: $name
Name: Wing
在雙引號里的字元串如果有 $ (dollar sign),只要改成跳脫字元的寫法即可:
$total = 12000
echo "Total: $ $total"; //輸出 Total: $ 12000
在做 variable interpolation 時,變數名稱是以一個以上空格做為界線,例如:
$n_file = 5;
if ($n_file == 1) {
echo "There are $n_file.";
} else {
echo "There are $n_files.";
}
當 $n_file 不為 1 時,"There are $n_files." PHP 所看到的變數為 $n_files,而不是正確的 $n_file,所以必須改成:
$n_file = 5;
if ($n_file == 1) {
echo "There are $n_file.";
} else {
echo "There are {$n_file}s.";
}

單引號內的雙引號,或是雙引號內的單引號都視為有效字元,不需使用跳脫字元,例如:
echo "I'm a happy bird.";
echo 'I'm a happy "bird"!';
輸出結果為:
I'm a happy bird.
I'm a happy "bird"!

反引號

利用反引號可以執行 UNIX 下的命令,並傳回執行結果。例如:
echo `ls -l *.txt`;
表示將 ls -l *.txt 命令的執行結果輸出,以反引號圍住的字元串為要執行的 UNIX 指令。

如何使用 PHP 的類型

PHP 的變數屬鬆散資料類型,變數的類型是在計算時動態 (dynamic) 決定的PHP 的鬆散資料類型,即我們給定什麼值,該變數即為什麼類型,或是如何使用該變數,該變數即為適當的類型,例如:

$foo = "0"; $foo 為 string (ASCII 48)
$foo++; $foo 變成 string "1" (ASCII 49)
$foo += 1; $foo 變成 integer (2)
$foo = $foo + 1.3; $foo 變成 double (3.3)
$foo = 5 + "10 Little Piggies"; $foo 為 integer (15)
$foo = 5 + "10 Small Pigs"; $foo 為 integer (15)

字串類型轉數值類型

當我們給變數的值是利用雙引號括住數值或字元串時,就是指定一個字元串給變數,例如:
$a = "Hello!";
$a 變數為字元串類型。請看底下的範例:
$a = "hello!";
echo $a;
?>

輸出結果為:
hello!

PHP 的變數是在執行時才決定類型,因為字元串也可以用來做計算,很奇怪吧!PHP 將字元串拿來做運算時,會依據底下二個原則設法將字元串轉成可以計算的類型:

字元串中包括 "."、"e" 或 "E" 時轉換成 double 類型,否則轉換為integer 無法轉換時則為 0

範例:
$foo = 1 + "10.5"; $foo 為 double (11.5)
$foo = 1 + "-1.3e3"; $foo 為 double (-1299)
$foo = 1 + "bob-1.3e3"; $foo 為 integer (1)
$foo = 1 + "bob3"; $foo 為 integer (1)
$foo = 1 + "10 Small Pigs"; $foo 為 integer (11)
$foo = 1 + "10 Little Piggies"; $foo 為 integer (11)
$foo = "10.0 pigs " + 1; $foo 為 int (11)
$foo = "10.0 pigs " + 1.0; $foo 為 double (11)

Type Juggling (類型轉換競爭)

變數在做運算時,例如使用 "+",當 expression 包含各種不同的類型時,就會有 Type Juggling 的動作發生,例如:
$foo = "0"; $foo 為 string "0" (ASCII 48)
$foo++; $foo 為 string "1" (ASCII 49)
$foo += 1; $foo 變成 integer (2)
$foo = $foo + 1.1; $foo 變成 double (3.1)
$foo = 5 + "15 Persons"; $foo 的運算結果為 integer (20)
$foo = 5 + "10 Big Pigs"; $foo 的運算結果為 integer (15)
又如:
$a = 5; // $a 的類型為 integer
$a[0] = "Hi!"; // $a 的類型變成 array
這種類別的改變即稱為 "Type Juggling"。

局部變數

在 function 里初始化的變數即局部變數。為什麼叫局部變數呢?因為局部變數只有在 function 里可以被「看見」,請看底下的範例:
function sum() {
$a = 1;
$b = 2;
echo $a+$b;
}
echo "
". $a;
sum();
執行結果:
3
0

第二個輸出的結果為 0,這是因為 function 里的 $a 只有在 function 里才能被看到,在 function 外局部變數就不能被看見。

全局變數

在局部變數範圍之外所宣告的變數即全局變數,例如:
$a = 1;

function sum() {
echo $a;
}

sum();
這段程序代碼執行后不會有任何輸出,可是 $a 不是一個全局變數嗎?請記得一點,因為 PHP 的變數是不須經過宣告的,所以 function 里的 $a 其實仍然是一個局部變數。

局部變數的可見度會蓋掉全局變數,所以 sum() 所 echo 出的 $a 變數是一個局部變數,那該如何告訴 function 變數是一個全局變數呢?利用 global 關鍵詞即可:
$a = 1;

function sum() {
global $a;

$a = $a*100;
}

sum();
echo $a;
執行結果:
100

第一段程序代碼其實存在了二個變數,一個是全局變數 $a,另一個則是局部變數 $a。在第二段程序代碼里,則只有一個全局變數 $a。

對於全局變數另外一個重點就是,倒底全局變數的範圍為何?在 PHP 里,全局變數也稱為 page-scoped 變數,亦即在同一個檔案里的 PHP 程序都能看到這個全局變數。

靜態變數

局部變數生命期是在函數執行期間,隨函數的執行結束而結束,而靜態變數的生命期是隨整個 PHP 程序結束而結束,但可見度只有該函數。利用關鍵詞 static 來宣告靜態變數:
function sum() {
static $a = 1;

if ($a < 10) {
echo $a;
$a++;
sum();
}

sum();
輸出結果:
123456789

區部或全局變數都不是靜態變數,因為函數執行結束后,變數的值並不會被保留。而所謂的靜態變數意思就是說,當函數執行結束后,該變數的值仍然會被保留,因此第二次函數該函數時,靜態變數之前的值仍然存在。
變數的定義
使用者自定變數可使用 define() 函數,這些變數定義后,包括 PHP 里事先定義好的變數,都不能再被重新定義。例如我們要定義 PI 變數的值為 3.14159:
define("PI", 3.14159);
echo PI; // 輸出為 3.14159
這裡的 "PI" 被我們定義成常數,因此以後只要提到 PI,指的就是 3.14159,例如:
echo PI*10;

輸出結果等於 31.4159 (3.14159*10)。





[火星人 ] PHP中的常量和變數已經有436次圍觀

http://coctec.com/docs/program/show-post-72151.html