PHP 特殊基礎點

1. float類型不能直接進行比較,因爲有機器誤差的存在。

    以十進制能夠精確表示的有理數如 0.10.7,無論有多少尾數都不能被內部所使用的二進制精確表示,因此不能在不丟失一點點精度的情況下轉換爲二進制的格式。例如,floor((0.1+0.7)*10) 通常會返回 7 而不是預期中的 8,因爲該結果內部的表示其實是類似 7.9999999999999991118...

2. 單引號字符串中,除了單引號前加反斜槓(\') 以及兩個連續反斜槓(\\)中前一個反斜槓被認爲轉義符外,其他的都認爲單純的字符,其它轉義序列例如 \r 或者 \n,並不代表任何特殊含義,就單純是這兩個字符本身。

<?php
echo 'this is a simple string';

// 可以錄入多行
echo 'You can also have embedded newlines in 
strings this way as it is
okay to do';

// 輸出: Arnold once said: "I'll be back"
echo 'Arnold once said: "I\'ll be back"';

// 輸出: You deleted C:\*.*?
echo 'You deleted C:\\*.*?';

// 輸出: You deleted C:\*.*?
echo 'You deleted C:\*.*?';

// 輸出: This will not expand: \n a newline
echo 'This will not expand: \n a newline';

// 輸出: Variables do not $expand $either
echo 'Variables do not $expand $either';
?>

3.數組

    key 可以是 integer 或者 string。value 可以是任意類型。

 

此外 key 會有如下的強制轉換:

  • 包含有合法整型值的字符串會被轉換爲整型。例如鍵名 "8" 實際會被儲存爲 8。但是 "08" 則不會強制轉換,因爲其不是一個合法的十進制數值。
  • 浮點數也會被轉換爲整型,意味着其小數部分會被捨去。例如鍵名 8.7 實際會被儲存爲 8
  • 布爾值也會被轉換成整型。即鍵名 true 實際會被儲存爲 1 而鍵名 false 會被儲存爲 0
  • Null 會被轉換爲空字符串,即鍵名 null 實際會被儲存爲 ""
  • 數組和對象不能被用爲鍵名。堅持這麼做會導致警告:Illegal offset type

如果對給出的值沒有指定鍵名,則取當前最大的整數索引值,而新的鍵名將是該值加一。如果指定的鍵名已經有了值,則該值會被覆蓋。

4.empty 與 isset

a.empty 強調空

  • 0,"0"(隱性轉化),0.0 被認爲是空
  • NULL,FALSE/false 被認爲是空
  • $var; 未賦值被認爲是空
  • "" [] 空字符串,空數組被認爲時空

b.isset 強調變量是否賦值,是否設置

  • 未賦值 $var; false
  • NULL unset()過的變量 false

5.echo 和 print 的區別

共同點:首先echo 和 print 都不是嚴格意義上的函數,他們都是 語言結構;他們都只能輸出 字符串,整型跟int型浮點型數據。不能打印複合型和資源型數據;

而區別是:echo 可以連續輸出多個變量,而print只能一次輸出一個變量。print打印的值能直接複製給一個變量,如 $a = print “123”;

而echo 不可以,它沒有像函數的行爲,所以不能用於函數的上下文。在使用時,echo() 函數比 print()速度稍快。

 

6.var_dump()和print_r()的區別

共同點:兩者都可以打印數組,對象之類的複合型變量。

區別:print_r() 只能打印一些易於理解的信息,且print_r()在打印數組時,會將把數組的指針移到最後邊,使用 reset() 可讓指針回到開始處。 而var_dump()不但能打印複合類型的數據,還能打印資源類型的變量。且var_dump()輸出的信息則比較詳細,一般調試時用得多。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章