文章來自:zhouxiaoshuai
常量及數據類型
回顧題:PHP中字符串有幾種定義方式,以及各自的區別?
答:字符創的方式有三種,1,單引號2,雙引號3,heredoc和newdoc
考點:
1. 字符串的定義和各自區別?
各自區別:
單引號:
- 單引號不能解析轉義字符,只能解析單引號和反斜線。
- 變量與變量之間,變量與字符串之間,字符串與字符串之間可用 .(點) 連接;
雙引號
- 雙引號可以解析變量,變量可以使用特殊字符和{}包含;
- 雙引號可以解析所有轉義字符;
- 雙引號字符串也可以用 . (點) 來連接;
單引號的效率高于雙引號!
示例:
$str = 'abcdefgh'; // 單引號字符串
$str = 'abcde$afgh'; // 單引號不能解析變量,$a會原樣輸出
$str = "abcdefgh"; //雙引號字符串
$str = "abcde{$a}fgh"; //雙引號中的變量,使用{}來區分變量。雙引號可以解析變量所以會輸出$a的值,但{}不會輸出
$str = "abcde@$a@fgh"; //使用特殊字符來區分變量,但特殊組赴會被輸出
$str = "abcde'$a'fgh"; // 雙引號中,使用單引號來區分變量,變量也會被解析,因為總體還是在雙引號中,并且單引號還是會輸出[sql語句中]
heredoc
- heredoc 類似于雙引號,字符串中可以解析變量
- newdoc 類似于單引號,不能解析變量
// heredoc
$a = 'this is heredoc';
$str = <<<EOT
abcdefgh$a
EOT;
//newdoc
$str = <<< 'EOTT'
this is newdoc
EOTT;
兩者都是用于處理大文本的;
2. 數據類型、常量
數據類型:
- 標量:字符串,整型,浮點型,布爾型
- 符合: 數組,對象
- 特殊:資源,null
浮點型:
浮點型不能運用到比較運算中,不能用在相等的判斷中;
$a = 0.1;
$b = 0.7;
if($a + $b == 0.8)
{
......
}
//這里的判斷是不能成立的,因為在轉二進制的是,會有損耗。0.8 = 0.79999...
布爾型:
布爾false 的七種情況: 0, 0.0, '', '0', [], false, null
數組型:
9個超全局數組:
$GLOBALS, $_GET, $_POST, $_COOKIE, $_SESSION, $_REQUEST, $FILES, $_ENV, $SERVER
$GLOBALS:global全局變量,是一個包含了所有全局變量的組合數組,全局變量的名稱就是該組合數組的鍵。
$_GET:HTTP GET 變量,通過 URL 參數傳遞給當前腳本的變量的數組。
$_POST:HTTP POST 變量,通過 HTTP POST 方式傳遞給當前腳本的變量的數組。
$_COOKIE:HTTP Cookies 變量,通過 HTTP Cookies 方式傳遞給當前腳本的變量的數組。
$_SESSION:session 變量,當前腳本可用的 SESSION 變量的數組。
$_REQUEST:HTTP Request 變量,默認情況下包含了 $_GET,$_POST 和 $_COOKIE 的數組。
$_FILES:HTTP 文件上傳變量,通過 HTTP POST 方式上傳到當前腳本的項目的數組。
$_SERVER:服務器信息變量,包含了諸如頭信息(header)、路徑(path)、以及腳本位置(script locations)等信息的數組。這個數組中的項目由 Web 服務器創建。
$_ENV:環境變量,通過環境方式傳遞給當前腳本的變量的數組。
注意:
- $GLOBALS包含了其他8個超全局數組;
- $_REQUEST中包含了$_GET,$_POST,$COOKIE三個超全局數組,盡量少用$_REQUEST,因為安全性偏低{原因是可以接受三個超全局數組}
- $_SERVER中常見的數組元素以及含義;
$_SERVER
NULL:
NULL 的三種情況:
- 直接賦值為null;
- 未定義的變量;
- unset 掉的變量;
常量:
常量的定義:
const和define都可以定義常量;
區別:
- const是語言結構,效率上更快;
- define是函數,相對較慢;
- const可以定義類常量,define不能定義類常量;
常量一旦定義,不能修改和刪除;
魔術常量(8個);
PHP中有八個魔術常量,它們的值會隨著它們在代碼中的位置的改變而改變。這些特殊的常量不區分大小寫。
__LINE__ :返回文件中的當前行號。也可寫成__line__。
__FILE__:返回當前文件的絕對路徑(包含文件名)。
__DIR__:返回當前文件的絕對路徑(不包含文件名),等價于 dirname(__FILE__)。
__FUNCTION__:返回當前函數(或方法)的名稱。
__CLASS__:返回當前的類名(包括該類的作用區域或命名空間)。
__TRAIT__:返回當前的trait名稱(包括該trait的作用區域或命名空間)。
__METHOD__:返回當前的方法名(包括類名)。
__NAMESPACE__:返回當前文件的命名空間的名稱。
解題方法:
總結知識點,進行梳理復習然后牢記;
真題:
寫出獲取服務器IP和客戶端IP
$_SERVER['SERVER_ADDR'],$_SERVER['REMOTE_ADDR'];