前言
本系列文章主要是根據實戰視頻《360大牛:全面解讀PHP面試》學習過程中記錄的學習筆記,期間也會加入查找資料和平時學習中學習到的知識。
數據類型
PHP中數據類型主要分爲三大數據類型(標量、複合、特殊):
標量:浮點、整型、字符串、布爾
複合:數組、對象
特殊:null、resource
浮點類型
浮點類型不能運用到比較運算中。
<?php
$a = 0.1;
$b = 0.7;
if($a +$b == 0.8) {
echo "true";
} else {
echo "false"; ////false $a + $b = 0.79999999
}
布爾類型
FALSE的七種情況:
0, 0.0, '', '0', false, array() , NULL (整型0、浮點0.0、布爾false、空字符串、0字符串、空數組、NULL)
字符串
①定義方式:
單引號、雙引號、heredoc和nowdoc
②區別
1)單引號不能解析變量;
單引號不能解析轉義字符,只能解析單引號和反斜線本身;
變量和變量、變量和字符串、字符串和字符串之間可以用連接符 . 連接。
<?php
//單引號不能解析變量;雙引號可以
$a = 'g';
$str = 'abcdef$ah'; //輸出結果 abcdef$ah
$str = "abcdef'{$a}'h"; //輸出結果 abcdef‘g’h
//單引號不能解析轉義字符,只能解析單引號和反斜線本身
echo '\n'; // 輸出 \n
echo '\\'; // 輸出 \
echo '\''; // 輸出 '
//連接符連接
$str = 'hello';
echo $str . ' world'; //輸出 hello world
2)雙引號可以解析變量,可以使用特殊字符和{}包含;雙引號可以解析所有轉義字符;可以使用.來連接。
3)單引號效率更高。
4)Herdoc類似於雙引號;Nowdoc類似於單引號
<?php
$str = <<<EoT
.
. //heredoc 類似於雙引號 可以解析變量和轉義字符
.
EoT;
$str = <<<'EoT'
.
. //nowdoc類似於單引號 不可以解析變量和轉義字符
.
EoT;
兩者都用於處理大文本
在使用 heredoc 和 nowdoc 時,經常會遇到如下報錯:
Parse error: syntax error, unexpected T_SL in php
一般遇到該問題的原因是定界符之後空格的問題引起的。如上例中的EOT後面有空格就會報這個錯。處理是否有空格還有一個小技巧。以vim爲例,語法正確時,開始和結尾處的EOF會高亮顯示。不高亮時,則證明語法有問題。(參考鏈接:https://blog.csdn.net/jinxingfeng_cn/article/details/51643619)
數組類型
超全局數組
$GLOBALS 引用全局作用域中可用的全部變量。$GLOBALS 這種全局變量用於在 PHP 腳本中的任意位置訪問全局變量(在函數或方法中均可)。PHP 在名爲 $GLOBALS[index] 的數組中存儲了所有全局變量。變量的名字就是數組的鍵。
$_GET 可用於收集提交 HTML 表單 (method="get") 之後的表單數據。也可以收集 URL 中的發送的數據。
$_POST 用於收集提交 method="post" 的 HTML 表單後的表單數據。$_POST 也常用於傳遞變量。
$_REQUEST 用於收集 HTML 表單提交的數據。儘量不使用它,因爲不論是post還是get都可以訪問。
$_SESSION 會話機制。取得當前用戶訪問的唯一標識,以數組形式體現,如sessionid以及自定義session數據。session 變量,當前腳本可用的 SESSION 變量的數組。
$_COOKIE 會話機制。獲取和設置當前網站的Cookie標識。HTTP Cookies 變量,通過 HTTP Cookies 方式傳遞給當前腳本的變量的數組。
$_SERVER 保存關於報頭、路徑和腳本位置的信息。服務器信息變量,包含了諸如頭信息(header)、路徑(path)、以及腳本位置(script locations)等信息的數組。這個數組中的項目由 Web 服務器創建。
$_FILES 由HTTP POST 文件上傳而提交至腳本。HTTP 文件上傳變量,通過 HTTP POST 方式上傳到當前腳本的項目的數組。
$_ENV 與當前腳本文件的執行環境相關的一些變量。環境變量,通過環境方式傳遞給當前腳本的變量的數組。
注意:
$GLOBALS 包含了後面的所有超全局數組
$_REQUEST 包含了 $_GET 、 $_POST 、 $_COOKIE 。$_REQUEST 儘量少用。
對於 $_SERVER 需要記住常用的屬性:
$_SERVER['SERVER_ADDR] 服務器ip地址
$_SERVER['SERVER_NAME] 服務器名字
$_SERVER['SERVER_TIME] 請求時間
$_SERVER['QUERY_STRING] 查詢字符串,可能爲空
$_SERVER['HTTP_REFERER] 上一級請求的頁面
$_SERVER['HTTP_USER_AGENT] http的header中user_agent的信息
$_SERVER['REMOTE_ADDR] 客戶端ip地址
$_SERVER['REQUEST_URI] 如請求爲 www.imooc.com/index.php 那麼該值爲 /index.php
$_SERVER['PATH_INFO] url中地址部分 www.imooc.com/index.php/user/reg?status=true 該值爲 user/reg
NULL
變量爲 NULL 的三種情況:
直接賦值爲NULL、未定義的變量、unset()銷燬的變量。
常量
①定義:
const define
②區別:
const是語言結構,效率更快, define是函數。
define不能用於類常量的定義,const則可以。
注意:常量一經定義,不能被修改,也不能被刪除。
魔術常量
PHP中有八個魔術常量,它們的值會隨着它們在代碼中的位置的改變而改變。這些特殊的常量不區分大小寫。
__FILE__ 當前PHP程序腳本的絕對路徑及文件名稱。返回當前文件的絕對路徑(包含文件名)。
__LINE__ 存儲該常量所在的行號。返回文件中的當前行號。也可寫成__line__。
__DIR__ 返回當前文件的絕對路徑(不包含文件名),等價於 dirname(__FILE__)。
__FUNCTION__ 存儲該常量所在的函數名稱。返回當前函數(或方法)的名稱。
__CLASS__ 存儲該常量所在的類的名稱。返回當前的類名(包括該類的作用區域或命名空間)。
__TRAIT__ 返回當前的trait名稱(包括該trait的作用區域或命名空間)。
__METHOD__ 存儲該常量所在的類的方法的名稱。返回當前的方法名(包括類名)。
__NAMESPACE__ 返回當前文件的命名空間的名稱。
預定義常量
內核預定義常量:是在PHP的內核中就定義好了的常量。區分大小寫。
PHP_VERSION 存儲當前PHP的版本號,也可以通過PHPVERSION()函數獲取。
PHP_OS 存儲當前服務器的操作系統。
PHP_EOL 系統換行符,Windows是(\r\n),Linux是(\n),MAC是(\r)。
非全局預定義變量
$php_errormsg:前一個錯誤信息,$php_errormsg 變量包含由 PHP 生成的最新錯誤信息。這個變量只在錯誤發生的作用域內可用,並且要求 track_errors 配置項是開啓的(默認是關閉的)。
$HTTP_RAW_POST_DATA:包含 POST 提交的原始數據。
$http_response_header:HTTP 響應頭,$http_response_header 數組與 get_headers() 函數類似。當使用HTTP包裝器時,$http_response_header 將會被 HTTP 響應頭信息填充。
$argc:傳遞給腳本的參數數目,包含當運行於命令行下時傳遞給當前腳本的參數的數目。腳本的文件名總是作爲參數傳遞給當前腳本,因此 $argc 的最小值爲 1,這個變量僅在 register_argc_argv 打開時可用。
$argv:傳遞給腳本的參數數組,包含當運行於命令行下時傳遞給當前腳本的參數的數組。第一個參數總是當前腳本的文件名,因此 $argv[0] 就是腳本文件名,這個變量僅在 register_argc_argv 打開時可用。
常量與數據類型解題方法
把我們總結的點進行梳理和複習,牢記。
參考鏈接:
https://blog.csdn.net/jinxingfeng_cn/article/details/51643619
https://blog.csdn.net/lamp_yang_3533/article/details/50909260
http://www.w3school.com.cn/php/php_superglobals.asp
https://www.cnblogs.com/zdigd/p/7423488.html