摘要:類型簡介支持種原始數據類型。布爾類型特別注意,當轉換為時,以下值被認為是空字符串,以及字符串不包括任何元素的數組只要是對象,返回值均為。非整數類型下標會被轉換成整數。自起可用類型指定回調類型。
類型簡介
PHP 支持 8 種原始數據類型。
四種標量類型:
boolean(布爾型,不區分大小寫)
integer(整型)
float(浮點型,也稱作double)
string(字符串)
兩種復合類型:
array(數組)
object(對象)
最后是兩種特殊類型:
resource(資源)
NULL(無類型)
如果想查看某個表達式的值和類型,用var_dump()函數。
上面的代碼通過var_dump()打印變量的相關信息,輸出結果如下所示(PHP版本5.5.12)。
array (size=3) 0 => int 1 1 => int 2 2 => array (size=3) 0 => string "a" (length=1) 1 => string "b" (length=1) 2 => string "c" (length=1) float 3.1 boolean true如果只是想得到一個易讀懂的類型的表達方式用于調試,用gettype()函數。要查看某個類型,不要用gettype(),而用is_type函數。使用is_type可以對參數進行過濾。
如果要將一個變量強制轉換為某類型,可以對其使用強制轉換或者settype()函數。注意變量根據其當時的類型在特定場合下會表現出不同的值。
boolean布爾類型特別注意,當轉換為boolean時,以下值被認為是FALSE:
空字符串,以及字符串 "0"
不包括任何元素的數組
只要是對象,返回值均為TRUE。
下面這段程序能加深對boolean類型轉換的理解。
integer整型要使用八進制表達,數字前必須加上0(零)。
要使用十六進制表達,數字前必須加上0x。
要使用二進制表達,數字前必須加上0b。
二進制表達的integer自PHP 5.4.0起可用。integer值的字長可以用常量PHP_INT_SIZE來表示,最大值可以用常量PHP_INT_MAX來表示。
上面程序最后一條語句,處理八進制時發生一件怪事。那是因為,如果向八進制數傳遞了一個非法數字(即8或9),則后面其余數字會被忽略。
如果給定的一個數超出了integer的范圍,將會被解釋為float。同樣如果執行的運算結果超出了integer范圍,也會返回float。
PHP中沒有整除的運算符。1/2產生出float 0.5。值可以舍棄小數部分強制轉換為integer,或者使用round()函數可以更好地進行四舍五入。
手冊中說,決不要將未知的分數強制轉換為integer,這樣有時會導致不可預料的結果。
這段程序的輸出結果為7,永遠不要相信浮點數!
float浮點型某些數學運算會產生一個由常量NAN所代表的結果。此結果代表著一個在浮點數運算中未定義或不可表述的值。任何拿此值與其它任何值進行的松散或嚴格比較的結果都是FALSE。
string字符串一個字符串string就是由一系列的字符組成,其中每個字符等同于一個字節。實現方式是一個由字節組成的數組再加上一個整數指明緩沖區長度。這意味著PHP只能支持256的字符集,因此不支持Unicode。那中文是怎樣顯示的呢?先把疑問記錄下來。
字符串有4中語法表達方式:
單引號
雙引號
heredoc
nowdoc
單引號要表達一個單引號自身,需在它的前面加個反斜線()來轉義。
要表達一個反斜線自身,則用兩個反斜線()。
其它任何方式的反斜線都會被當成反斜線本身。但是,如果單引號包裹的字符串中只有一個反斜線,反斜線也會輸出,這是為什么呢?
雙引號可以對轉義字符進行解析,最重要的特征是變量會被解析。
單引號、雙引號都支持字符串多行錄入。
heredoc結構這種結構在以往的編程中使用的較少,這里詳細學習一下。
結構大致如下:
運算符<<<之后提供標識符,然后換行。
接下來是字符串本身。
最后用前面定義的標識符作為結束標志。結束時所引用的標識符必須在該行的第一列,這意味著標識符不能縮進,這行除了可能有一個分號(;)外,絕對不能包含其它字符。
Heredocs結構不能用來初始化類的屬性。自PHP 5.3起,此限制僅對heredoc包含變量時有效。
Heredoc 結構就象是沒有使用雙引號的雙引號字符串,轉義規則同雙引號。
nowdoc結構nowdoc結構與heredoc相似,只是跟在運算符<<<后面的標識符要用單引號括起來。
就象heredoc結構類似于雙引號字符串,nowdoc結構是類似于單引號字符串的。nowdoc中不進行解析操作。這種結構很適合用于嵌入PHP代碼或其它大段文本而無需對其中的特殊字符進行轉義。nowdoc結構可以用在任意的靜態數據環境中,最典型的示例是用來初始化類的屬性或常量。
變量解析變量解析有兩種語法規則,一種是簡單規則,一種是復雜規則。簡單規則最常用、最方便,這里詳細學習一下復雜語法規則。復雜規則語法的顯著標記是用花括號包圍的表達式。
復雜語法不是因為其語法復雜而得名,而是因為它可以使用復雜的表達式。 由于{無法被轉義,只有$緊挨著{時才會被識別。
存取和修改可以以數組形式訪問字符串,用超出字符串長度的下標寫入將會拉長該字符串并以空格填充。非整數類型下標會被轉換成整數。寫入時只用到了賦值字符串的第一個字符。用空字符串賦值則賦給的值是NULL字符。PHP的字符串在內部是字節組成的數組。因此用花括號訪問或修改字符串對多字節字符集很不安全。
字符串可以用 "."(點)運算符連接起來,注意 "+"(加號)運算符沒有這個功能。
一個布爾值boolean的TRUE被轉換成string的"1"。boolean的FALSE被轉換成""(空字符串)。字符串轉換為數值,該字符串的開始部分決定了它的值。如果該字符串以合法的數值開始,則使用該數值。否則其值為 0(零)。
PHP的優勢就體現在字符串處理的方便上,對于string的操作有很多有用的函數,可以運用各種函數,還有正則表達式。
PHP 并不特別指明字符串的編碼,字符串會被按照該腳本文件相同的編碼方式來編碼。因此,操作文本的函數必須假定字符串是如何編碼的。不幸的是,PHP關于此的函數有很多變種,關于PHP的字符串處理函數還需多加學習。
array數組PHP中的數組實際上是一個有序映射,映射是一種把values關聯到keys的類型。
可以用array()語言結構來新建一個數組。它接受任意數量用逗號分隔的“鍵(key)=>值(value)對”。自5.4起可以使用短數組定義語法,用[]替代array()。key可以是integer或者string,value可以是任意類型。
key會有如下的強制轉換和規則:
包含有合法整型值的字符串會被轉換為整型。
浮點數也會被轉換為整型,意味著其小數部分會被舍去。
布爾值也會被轉換成整型。
null會被轉換為空字符串,即鍵名null實際會被儲存為""。
數組和對象不能被用為鍵名。
如果在數組定義中多個單元都使用了同一個鍵名,則只使用了最后一個,之前的都被覆蓋了。
如果對給出的值沒有指定鍵名,則取當前最大的整數索引值,而新的鍵名將是該值加一。
"a", "02" => "b"); var_dump($a);通過上面的規則可知,這段代碼的輸出結果如下:
array (size=2) 20 => string "a" (length=1) "02" => string "b" (length=1)如果給出方括號但沒有指定鍵名,則取當前最大整數索引值,新的鍵名將是該值加上1(但是最小為0)。要刪除某鍵值對,對其調用unset()函數,該函數允許刪除數組中的某個鍵,但要注意數組將不會重建索引。
"b"); $a[] = "c"; var_dump($a); unset($a[1]); var_dump($a);對于上面這段程序,輸出為:
array (size=3) 0 => string "a" (length=1) "b" => string "b" (length=1) 1 => string "c" (length=1) array (size=2) 0 => string "a" (length=1) "b" => string "b" (length=1)應該始終在用字符串表示的數組索引上加上引號。例如用$foo["bar"]而不是$foo[bar]。此代碼中有一個未定義的常量(bar)而不是字符串("bar"-注意引號),而 PHP 可能會在以后定義此常量。
foreach控制結構是專門用于數組的。它提供了一個簡單的方法來遍歷數組。
下面的示例程序,通過讀取目錄填充數組,這里涉及到幾個函數的使用。
對于任意integer,float,string,boolean和resource類型,如果將一個值轉換為數組,將得到一個僅有一個元素的數組,其下標為 0,該元素即為此標量的值。
object對象要創建一個新的對象 object,使用 new 語句實例化一個類。
如果將一個對象轉換成對象,它將不會有任何變化。如果其它任何類型的值被轉換成對象,將會創建一個內置類 stdClass 的實例。如果該值為 NULL,則新的實例為空。數組轉換成對象將使鍵名成為屬性名并具有相對應的值。對于任何其它的值,名為 scalar 的成員變量將包含該值。
do_foo(); var_dump($bar); $obj = (object) "hello"; var_dump($obj);上面的示例程序輸出結果為:
Doint foo.object(foo)[1] object(stdClass)[2] public "scalar" => string "hello" (length=5)resource資源類型資源resource是一種特殊變量,保存了到外部資源的一個引用。資源使用的所有外部資源都會被垃圾回收系統釋放,很少需要手工釋放內存。但是,持久數據庫連接比較特殊,它們不會被垃圾回收系統銷毀。
NULLNULL類型只有一個值,就是不區分大小寫的常量NULL。
callback回調類型第一次接觸到這個概念,有點陌生。
自PHP 5.4起可用callable類型指定回調類型callback。
手冊示例程序中使用了很多call_user_func函數,先把這函數理一下。call_user_func把第一個參數作為回調函數(callback),并且將其余的參數作為回調函數的參數。返回回調函數的返回值,如果錯誤則返回FALSE。
回調函數可以是簡單函數、對象方法、靜態類方法,回調函數的幾種使用方法如下所示:
調用用戶自定義的簡單函數,以string類型傳遞其名稱。
調用類的靜態成員方法,類及方法被作為數組傳遞,下標0包含該對象,下標1包含方法名。
調用已實例化的對象方法。
調用靜態類方法。
調用父類靜態成員方法。
除了普通的用戶自定義函數外,create_function()可以用來創建一個匿名回調函數。
類型轉換PHP是弱類型語言,變量類型根據使用該變量的上下文所決定的。
(全文完)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21113.html
摘要:最近計劃把手冊,認真的先過一遍。語言參考類型新認知強制轉換類型用。后期靜態綁定從這里開始語言參考生成器新認知生成器汗水的核心是關鍵字。語言參考預定義變量超全局變量前一個錯誤信息原始數據以上 showImg(https://segmentfault.com/img/remote/1460000010147451); 最近計劃把 PHP手冊,認真的先過一遍。記錄一些以前不知道,不明確的知識...
摘要:標記如果文件內容是純代碼,最好在文件末尾刪除結束標記。這可以避免在結束標記之后萬一意外加入了空格或者換行符,會導致開始輸出這些空白,而腳本中此時并無輸出的意圖。指令分隔符需要在每個語句后用分號結束指令,這個分號就叫指令分隔符。 PHP標記 如果文件內容是純PHP代碼,最好在文件末尾刪除PHP結束標記。這可以避免在PHP結束標記之后萬一意外加入了空格或者換行符,會導致PHP開始輸出這些空...
摘要:通過注冊自動加載器,腳本引擎在出錯失敗前有了最后一個機會加載所需的類構造函數和析構函數構造函數允行開發者在一個類中定義一個方法作為構造函數。析構函數會在到某個對象的所有引用都被刪除或者當對象被顯式銷毀時執行抽象類支持抽象類和抽象方法。 語言參考 1. 類型 1.1 簡介 showImg(https://segmentfault.com/img/bVbqlNJ?w=531&h=379);...
摘要:例子關閉文件操作讀取文件讀取文件中的一個字符讀取文件中的一個字符,返回文件中的一個字符并將指針移動到下一個字符解釋指使用函數打開文件時返回的資源對象。目標文件的文件名及其所在路徑。服務器上目標文件的文件名及其所在路徑。 打開文件 fopen(string filename,string mode);//返回一個資源對象,存儲當前文件資源 解釋 filename:文件的文件名及其所在...
摘要:手冊序言,即,是一種被廣泛應用的開源通用腳本語言,尤其適用于開發并可嵌入中去。該語言的主要目標是允許開發人員快速編寫動態生成的頁面,但的用途遠不只于此。對于服務器模塊版本的,僅在服務器啟動時讀取一次。 PHP手冊 序言 PHP,即PHP: Hypertext Preprocessor,是一種被廣泛應用的開源通用腳本語言,尤其適用于 Web 開發并可嵌入 HTML 中去。它的語法利用了 ...
閱讀 1540·2023-04-26 02:50
閱讀 3547·2023-04-26 00:28
閱讀 1937·2023-04-25 15:18
閱讀 3217·2021-11-24 10:31
閱讀 988·2019-08-30 13:00
閱讀 1004·2019-08-29 15:19
閱讀 1774·2019-08-29 13:09
閱讀 2983·2019-08-29 13:06