基本語法
PHP標記
<?php
?>
//短標記
<?
?>
注釋
PHP 支持 C,C++ 和 Unix Shell 風格(Perl 風格)的注釋。
<?php
echo "This is a test"; // This is a one-line c++ style comment
/* This is a multi line comment
yet another line of comment */
echo "This is yet another test";
echo 'One Final Test'; # This is a one-line shell-style comment
?>
類型
簡介
PHP 支持 8 種原始數據類型。
四種標量類型:
- boolean(布爾型)
- integer(整型)
- float(浮點型,也稱作double)
- string(字符串)
兩種復合類型:
- array(數組)
- object(對象)
最后是兩種特殊類型:
- resource(資源)
- NULL(無類型)
Boolean 布爾類型
boolean 表達了真值,可以為 TRUE 或 FALSE。
要指定一個布爾值,使用關鍵字 TRUE 或 FALSE。兩個都不區分大小寫。
要明確地將一個值轉換成 boolean,用 (bool) 或者 (boolean) 來強制轉換。但是很多情況下不需要用強制轉換,因為當運算符,函數或者流程控制結構需要一個 boolean 參數時,該值會被自動轉換。
當轉換為 boolean 時,以下值被認為是 FALSE:
- 布爾值 FALSE 本身
- 整型值 0(零)
- 浮點型值 0.0(零)
- 空字符串,以及字符串 "0"
- 不包括任何元素的數組
- 不包括任何成員變量的對象(僅 PHP 4.0 適用)
- 特殊類型 NULL(包括尚未賦值的變量)
- 從空標記生成的 SimpleXML 對象
所有其它值都被認為是 TRUE(包括任何資源)。
integer 整型
整型值可以使用十進制,十六進制,八進制或二進制表示,前面可以加上可選的符號(- 或者 +)。
二進制表達的 integer 自 PHP 5.4.0 起可用。
整型數的字長和平臺有關,盡管通常最大值是大約二十億(32 位有符號)。64 位平臺下的最大值通常是大約 9E18。
PHP 不支持無符號整數。
如果給定的一個數超出了 integer 的范圍,將會被解釋為 float。同樣如果執行的運算結果超出了 integer 范圍,也會返回 float。
PHP 中沒有整除的運算符。1/2 產生出 float 0.5。值可以舍棄小數部分強制轉換為 integer,或者使用 round() 函數可以更好地進行四舍五入。
<?php
var_dump(25/7); // float(3.5714285714286)
var_dump((int) (25/7)); // int(3)
var_dump(round(25/7)); // float(4)
?>
從布爾值轉換:FALSE 將產生出 0(零),TRUE 將產生出 1(壹)。
從浮點型轉換:當從浮點數轉換成整數時,將向下取整。
如果浮點數超出了整數范圍(32 位平臺下通常為 +/- 2.15e+9 = 2^31,64 位平臺下通常為 +/- 9.22e+18 = 2^63),則結果為未定義,因為沒有足夠的精度給出一個確切的整數結果。在此情況下沒有警告,甚至沒有任何通知!
float 浮點型
浮點數的字長和平臺相關,盡管通常最大值是 1.8e308 并具有 14 位十進制數字的精度(64 位 IEEE 格式)。
對于其它類型(除了string)的值,其情況類似于先將值轉換成整型,然后再轉換成浮點。
自 PHP 5 起,如果試圖將對象轉換為浮點數,會發出一條 E_NOTICE 錯誤消息。
某些數學運算會產生一個由常量 NAN
所代表的結果。此結果代表著一個在浮點數運算中未定義或不可表述的值。任何拿此值與其它任何值進行的松散或嚴格比較的結果都是 FALSE
。
由于 NAN
代表著任何不同值,不應拿 NAN
去和其它值進行比較,包括其自身,應該用 is_nan()
來檢查。
string 字符串
一個字符串 string 就是由一系列的字符組成,其中每個字符等同于一個字節。這意味著 PHP 只能支持 256 的字符集,因此不支持 Unicode 。
一個字符串可以用 4 種方式表達:
- 單引號
- 雙引號
- heredoc
- nowdoc(自 PHP 5.3.0 起)
heredoc
第三種表達字符串的方法是用 heredoc 句法結構: <<< 。在該運算符之后要提供一個標識符,然后換行。接下來是字符串 string 本身,最后要用前面定義的標識符作為結束標志。
結束時所引用的標識符必須在該行的第一列,而且,標識符的命名也要像其它標簽一樣遵守 PHP 的規則:只能包含字母、數字和下劃線,并且必須以字母和下劃線作為開頭。
要注意的是結束標識符這行除了可能有一個分號(;)外,絕對不能包含其它字符。這意味著標識符不能縮進,分號的前后也不能有任何空白或制表符。更重要的是結束標識符的前面必須是個被本地操作系統認可的換行,比如在 UNIX 和 Mac OS X 系統中是 \n,而結束定界符(可能其后有個分號)之后也必須緊跟一個換行。
如果不遵守該規則導致結束標識不“干凈”,PHP 將認為它不是結束標識符而繼續尋找。如果在文件結束前也沒有找到一個正確的結束標識符,PHP 將會在最后一行產生一個解析錯誤。
Heredoc 結構就象是沒有使用雙引號的雙引號字符串,這就是說在 heredoc 結構中單引號不用被轉義,但是上文中列出的轉義序列還可以使用。變量將被替換,但在 heredoc 結構中含有復雜的變量時要格外小心。
nowdoc
一個 nowdoc 結構也用和 heredocs 結構一樣的標記 <<<, 但是跟在后面的標識符要用單引號括起來,即 <<<'EOT'。Heredoc 結構的所有規則也同樣適用于 nowdoc 結構,尤其是結束標識符的規則,但是 nowdoc 中不進行解析操作。