字符串中的換行符號
雖然PHP為換行符號提供了一個跳脫轉義序列(
),但讓你知道能夠在字符串中間字面上加入換行符號也不錯,PHP同樣能夠處理這種形式。在建立HTML字串時這樣會很方便,因為瀏覽器會忽略(
)換行符號,因此可以用換行符號格式化字符串,使得PHP代碼行更短:
在文字編輯器中,在前兩行尾端隱藏按下「Enter」鍵,這些換行符號保留在字串中,因此一條print敘述可以產生三行PHP輸出(行的長度則取決於各種不同編輯器,如果編輯器在顯示它們時自動換行,就會看到實際上是一長條的三行程式碼)。不過瀏覽器程式會忽略這些換行符號,並自己決定顯示時是否換行以及在何處換行,此外如果使用你的瀏覽器的檢視原始碼觀察原始碼的話你會看到這些換行。
限制
對於字符串長度沒有什麼人為的限制,只要在可用的記憶限度內即可,一般應該能不去限製字符串長度
陣列
PHP的陣列類型使得程式設計者能夠將許多不同型別的值組織在一起,並按照字(也可以按名稱)對其進行索引。如果你發現自己在使用名字類似$ thing1、$thing2、 $thing3之類的變數,那就建議你應該採用陣列($things[1]、$thing[2]、 $thing[3]等)。陣列元素是透過方括號中的索引(在這個例子子中是)[1]、 [2]、 [3]等)來使用的,不同型別的元素可指定到同一個陣列中。
學習PHP陣列的最好方式就是透過範例。以下是一些簡單的程式範例子,在第一次指定前和指定後查看陣列變數的內容:
讓我們來說明第一次指定前和指定後發生的什麼。在指定前,儘管有了名字,但PHP並不知道變數$my_array的目的是要成為陣列,只把它當成與其它變數一樣的未指定變數。這意思是說當變數括到雙引號字串時,變數被解釋為空字符串。陣列索引所參照引用([5])到未指定的變數時一樣會作未指定變數。結果是前三條print敘述都以[is]結尾。
指定之後,$my_array正式成為陣列,而結果是在含到雙引號字串時印出「Array」字串。由數字5索引的陣列格已填入了字符串“Slot#6”(實妹上,在大多數程式語言中,陣列元素是從0開始計數的)因此可用編號5的索引取字符串。這是唯一改變的地方——$my_array 的第0格還是沒有東西,所以和之前一樣沒有變化。
陣列的執行
陣列是PHP最酷且最有用的功能之一,雖然它們看上去好像類似其它語言中的陣列,但實際上是相當不販方式來實行的。
在大多數程式設計語言中,會用類似下面的語句來宣告一個陣列:
Int int_array[10] ;//這不是PHP語法呼和哦!
該語句總共會記憶體中設定十個連續的整數,這些變數可依照int_array範圍為0 ~9的編號索引來存取。
另一方面,PHP陣列是可以相互結合的,當陣列指定時,實際上添加一個新的囝列格,把它和一個新的索引組合在一起,這個索引可用來獲取該值[對於熟悉準湊表(hash table)的程式設計來說這是很有意義的,PHP陣列更像是它語言中的準湊表]。
這裡暗示了一件事,那就是讀者不用擔心指定一個數量非常高的陣列格,例如:
My_ayyay[100000000]= “not scary”//這個就沒問題了
因為這樣設的結果並不會真的出現很很多的格位,中間那些格位都不存在,因此也不會佔用任何記憶體。
字串做為陣列索引
到目前為止,我們的陣列範範例只使用整數來索引編號,其實PHP也可以使用字串值做為索引,例如:
$tasty['Spanish']= 「paella」;
$tast ['Japanese']= “sashimi”;
$tast ['Scottish']= “haggis?”;
這些索引與數字索引的使用方式相同,而且數字和字符串索引可用於同一個陣列,它們不會有衝突。
結構型別怎麼不見了?
有些程式語言(C、Pascal)提供了「結構(structure)」或「紀錄(record)」型別,允許把不同型別的變數包裝在一起。在這樣的語言中,選擇複合型別的基本原則是:如果包含水量的所有值是同一型別的,否則就使用結構。
現在的PHP有了物件型別(object type),它除了有更特殊的屬性外,也有類似紀錄或結構型別的特性。然而在介紹物件之前,PHP也不真正需要結構型別,因為PHP的陣列並沒有限制只能使用一種類型的值。如果從有結構型別的語言中把程式碼尊字典轉到PHP中,有種可能性就是利用可結合的陣列,並使用字串索引,分別對應原來的欄位名稱。
其它陣列特性
其實本章只會粗淺介紹陣列,另外,陣列還可以是多維的,可以用許多不同方法指定,並且還有許多有用的函數,可使用對陣列的觀察、重用和操控更容易。在本書第十一章會更深入講解陣列。
物件
PHP的另一個基本型別就是物件,這是PHP進入物件導向程式語言的通道。有如陣列一般,物體也是一種複合型別,並可以使你將其他各種類型整合為一個對象,對象擁有額外更加複準的屬性,包含水量可以將函數視為資料整合在內,並可以使用其他物件道向的觀念,並期許你參考該章節來學到更多的資訊。
Resources
Resources是PHP本身之外一種用來參照記憶體的特殊值,你不需要知道太多關於Resources就可以寫PHP,我們會簡單介紹所有可能的Resources,但是請安心跳過以下“要如何處理資源”部分。
到底何者是Resources呢?
Resources是PHP用來與外部程式溝通的型別(可以是資料庫或影像處理程式),PHP可能需要使用這些程式在記憶體所配置的資源,大體上PHP 程式設計師不需要在PHP設計上擔心記憶體的釋放,如果你在PHP程序內產生一個字符串(必須佔據一部分記憶體位置),你可以忘記它的一切細節直到程序結束, PHP(或者所架的Wed服務器)會在你的程式執行完畢後釋回適當的記憶體,即使並非馬上。
外部的程式(資料庫等等)可能無法如此聰明的釋放記憶體,等到你的程式已經運作之後你可能設想到為你的資料庫保留適當的記憶體,PHP用這種方式所處理的方法是將所有有如這般外部程式存取記憶體的特殊函式都回傳Resources,並用來讓PHP檢查是否你的程式可以取得這些資源,如果沒有人可以使用這些資源的話,PHP會藉由記數此資源的參照,使得外部程序可以正確解決這類問題,如果參照計數為0的話這個資源就可以被釋回了。
要如何處理資源?
通常PHP程式設計師本身並不需建立這些資源,他們藉由呼叫一些特殊函式來回傳這些資源型別,並將之傳迅給其他需要資源型別的函式。例如(我們會在本書第二部分介紹),你可以乎要mysql_connect()函數(用來回傳連線到M y S Q L資料參照),並存放結果到一個變數,並傳迅它給mysql_query()函數(使用此連線來存取資料庫)。
基本上你使用這個連線資源所南需要的步驟是將它存放在一具變數並將它傳迅至需要的函數內,你可以在程序結束後透過PHP來清除這個資源。無論如何,如果你覺得在程序結束之前這個資源在程序執行中已經耗盡了許多記憶體並想要提前釋放的話,你應該可以如同這樣做:
$my_resource=mysql_connect();//存放變數
//使用連線資源的程式片段
$my_resource=NULL;//變數不再參考原資源
$my_resource的指定會讓PHP檢查沒有其他程式使用MySQL資源然後才開始釋放它。
型別測試
因為變數能夠根據重新指定來改變型別,有時就需要在程式執行時弄清楚某個值的型別。 PHP既提供了一般的型別測試函數(gettype()),也為五種資料型別分別提供了Boolean函數。這些函數中有的還具有可替換的名稱,表6-1總了這些函數:
表6-1函數的類型測試
指定和強制轉換
正如前面已經講過的,PHP常常在本文需要時自動把一種型轉換成另一種,不過PHP程式設計者也可以強制發生這樣的轉換。無論在哪種情況下,程試設計者都應該知道期望得到什麼結果。
型別轉換行為
以下是PHP從一種型別轉換成另一種時的一些通則:
整數到倍精度浮點數:建立精確符合的倍精度浮點數(例如int4變成double4. 0倍)。
倍精度浮點數到整數:小數部分被捨去。
數字到Boolean:如果等於0,則為FALSE,否則為TRUE。
數字到字串:字串以數字顯示時的外觀來建立。整數輸出顯示為一個數字序列,倍精度浮點數以所需的最小精度來輸出,小數點後字數很多的倍精度浮點值將轉換為笠學符號記數法。
Boolean到數字:如果是TRUE,則得到1,如果是FALSE,則得到0。
Boolean的字串:如果是TRUE,則得到1,如果是FALSE則得到空字串。
NULL到數字:0
NULL到Boolean:FALSE
字符串到數字:等同於從字符串“讀取”一個數字,然後把它櫝換成給定的類型。如果無法讀出數字,則得值為0,並非所有字串都需要能夠讀取才算成功。
字串到Boolean:如果是空字串或0,則為FALSE,否則為TRUE。
簡單型別(數字或字串)的陣列:等同於用指定給索引0的這個值建立一個新陣列。
陣列到數字:未定義(詳見以下說明)
陣列到Boolean:如果陣列沒有元素,則為FALSE,否則為TRUE。
陣列到字串:即為「Arryay」。
物件到數字:未定義(詳見以下說明)。
物件到Boolean:如果物件含有任合成員變數擁有值的話為TRUE,否則為FALSE。
物件到字串:「Object」.
資源到Boolean:FALSE。
資源到數字:未定義(詳見以下說明)
資源到數字:有時有如「Resource id #1」(但是無法十分依賴這個慣例)。
在上述列表中,我們發現有些型別在轉換為數值型別時是未定義的,在上述說明中,未定義意指PHP設計者並沒有在未業PHP版本定下何種最終的轉換規則,所以壞消息就是必須根據你的程式寫法所定,你可能在你使用的特定PHP版本發現可以轉換為數值類型,但是卻可能無法在下一個版本運作。
以上就是PHP學習寶典-第六章(續篇)的內容,更多相關內容請關注PHP中文網(www.php.cn)!