1. 程式人生 > >PHP中幾個容易混淆的函式的區別

PHP中幾個容易混淆的函式的區別

PHP中有一些函式的功能十分接近,容易造成混淆。雖然功能相當,但在細節問題上可能會有很大出入。所以,如果使用不當,可能會造成一些不必要的麻煩。以下整理了幾個日常使用中容易混淆的函式,以備查閱。

1. echo、print、print_r、printf、vprintf和sprintf
echo用於輸出一個或多個字串。它實際上並不是函式,而是一個語言結構,所以它並沒有返回值。當列印多個變數時,不能像函式呼叫那樣使用括號。
print用於輸出一個字串,有返回值(始終返回int(1))
print_r用於列印關於一個變數的易於理解的資訊。如果給出的引數是string、integer或float,將列印變數值本身。如果是array,將按照一定的格式顯示鍵和元素。object與陣列類似。
printf用於輸出一個格式化的字串,返回輸出字串的長度
vprintf用於輸出一個格式化的字串,但其接受的引數為一個數組,返回輸出字串的長度
sprintf用於返回一個格式化的字串,不進行輸出操作

2. require、include、require_once和include_once
require()和include()幾乎完全一樣,除了處理失敗的方式不同之外。include()產生一個Warning而require()則導致一個Fatal Error。所以,如果想在丟失檔案時停止處理頁面,則應該用require()。
require_once()和include_once()應用於在指令碼執行期間同一個檔案有可能被包含超過一次的情況下,想確保它只被包含一次以避免函式重定義,變數重新賦值等問題。

3. empty與isset
empty用於檢查一個變數是否為空,如果待檢測變數時非空或非零的值,將返回FALSE。換句話說,""、0、"0"、NULL、FALSE、array()以及沒有任何屬性的物件都將被認為是空的。
isset用於檢測變數是否已設定。以下三種情況將返回FALSE:變數不存在、變數已被unset()釋放、變數被設定為NULL

4. htmlentities與htmlspecialchars
htmlentities會將所有的字元都轉換成HTML實體字元,在中文情況下會造成亂碼
htmlspecialchars只轉換幾個特殊的字元,包括:&、"、'、<以及>

5. urlencode與rawurlencode
urlencode返回字串,此字串中除了-_.之外的所有非字母數字字元都將被替換成百分號(%)後跟兩位十六進位制數,空格則編碼為加號(+)。
rawurlencode按照RFC1738對URL進行編碼。與urlencode的區別是,它會將空格編碼為'20%'。