函數定義常量:define
define(「PI」,3.14);數據庫
使用const關鍵字
const PI= 3;數組
特殊常量:雙下劃線開始+常量名+雙下劃線結束,稱爲魔術常量,魔術常量的值一般會跟着環境變化,可是不能改變
__DIR__:當前被執行腳本所在電腦的絕對路徑
__FILE__:當前被執行腳本所在電腦的絕對路徑(帶本身文件的名字)
__LINE__:當前所屬的行數
__NAMESPACE__:當前所屬的命名空間
__CLASS__:當前所屬的類
__METHOD__:當前所屬的方法數據結構
自動轉換
echo $a +$b;閉包
強制轉換
echo (float)$a,(float)$b;函數
類型判斷ui
var_dump(is_int($a));spa
var_dump(is_string($a));3d
數據判斷
empty():判斷數據的值是否爲空 isset():判斷變量自己是否存在
$c1 = 1;
$c3 = ‘’;
var_dump(empty($c1),isset($c1));
var_dump(empty($c3),isset($c3));指針
三目運算符(分支結構) 對象
a?b:c 若是a成立,那麼執行b,不然執行c
若是表達式複雜,用括號包起來;b、c均可以是另一個三目運算
$a =10;
$b =$a > 10 ? 100 : 0;
echo $b;
自操做運算符
$a =1, $b = 1;
$a++;++$b;
echo $a,$b; //獨立運算
替代語法 {用:替代 }用end+對應的起始標記替代
例: if(){}; -> if(): endif;
可使用替代語法的:if switch for while foreach
文件包含四種形式
在PHP中文件的包含有四種形式(兩種大形式)
Include:包含文件
Include_once:系統會自動判斷文件包含過程當中,是否已經包含過(一個文件最多被包含一次)
Require:與include相同
Require_once:以include_once相同
Include和include_once的區別: Include系統會碰到一次,執行一次;若是對統一個文件進行屢次加載,那麼系統會執行屢次;
Include_once:系統碰到屢次,也只會執行一次。
Require和include的區別:本質都是包含文件,惟一的區別在於包含不到文件的時候,報錯的形式不同
Include的錯誤級別比較輕:不會阻止代碼執行 Require要求較高:若是包含出錯代碼再也不執行(require後面的代碼)
函數定義語法
Function 函數名([參數]){
//函數體
//返回值:return 結果; }
函數的調用特色:只要系統在內存中可以找到對應的函數,就能夠執行(函數的調用能夠在函數定義以前)
函數在定義的時候,對應的b形參採用的是取地址,a形參是取值,因此b改變了本身也改變了外部
全局變量不能在局部空間內使用
局部變量也不能在全局內訪問
使用超全局變量則能夠不受全局變量和局部變量的限制
echo $GLOBALS[‘全局變量’];
運用另一種定義方法也能夠實現局部訪問全局變量:
Global關鍵字:是一種在函數裏面定義變量的一種方式
一、 若是使用global定義的變量名在外部存在(全局變量),那麼系統在函數內部定義的變量直接指向外部全局變量所指向的內存空間(同一個變量);
二、 若是使用global定義的變量名在外部不存在(全局變量),系統會自動在全局空間(外部)定義一個與局部變量同名的全局變量
static:靜態變量
靜態變量的原理:系統在進行編譯的時候就會對static這一行爲初始變量賦值,在函數調用的時候會自動跳過static這一行,因此$count++能夠一直執行遞增
靜態變量的使用:
1.爲了統計當前函數被調用的次數
2.爲了統籌函數屢次調用獲得的不一樣結果(遞歸思想)
可變函數在系統使用的過程當中仍是比較多的,尤爲是使用不少系統函數的時候:須要用戶在外部定義一個自定義函數,可是是須要傳入到系統函數內部使用。
將一個用戶定於的函數傳入另一個函數去使用的過程,稱之爲回調過程,被傳入的函數稱之爲回調函數
變量保存匿名函數,本質獲得的是一個對象(Closure)
closure:閉包。
函數內部有一些局部變量(要執行的代碼塊)在函數執行以後沒有被釋放,是由於在函數內部還有對應的函數在引用(函數的內部函數:匿名函數)
引號方式:比較適合定義那些比較短(不超過一行)或者沒有結構要求的字符串 若是有結構要求,或者內容超過一行,可使用如下兩種結構定義
nowdoc字符串:沒有單引號的單引號字符串 heredoc字符串:沒有雙引號的雙引號字符串
在PHP中系統經常使用的轉義符號:
\’:在單引號字符串中顯示單引號
\」:在雙引號字符串中顯示雙引號
\r:表明回車(理論上是回到當前行的首位置)
\n:表明新一行
\t:相似tab鍵,輸出4個空格
$:在PHP中使用$符號做爲變量符號,所以須要特定識別
單引號和雙引號的區別: 一、 其中單引號中可以識別\’,而雙引號中就不能識別\’
二、 雙引號中由於可以識別$符號,因此雙引號中能夠解析變量,而單引號不能夠
雙引號中變量識別的規則
1)變量自己系統可以與後面的內容區分:應該保證變量的獨立性,不要讓系統難以區分
2)使用變量專業標識符(區分),給變量加上一組大括號{}
結構化定義字符串變量的規則:
一、 結構化定義字符串對應的邊界符有條件:
1.1 上邊界符後面不能跟任何內容;
1.2 下邊界符必須頂格:最左邊;
1.3 下邊界一樣後面只能跟分號,不能跟任何內容;
二、 結構化定義字符串的內部(邊界符之間)的全部內容都是字符串自己
基本函數strlen():獲得字符串的長度(字節爲單位)
中文字符串在utf-8一個漢字佔3個字節
多字節字符串的長度問題:包含中文的長度
多字節字符串擴展模塊:mbstring擴展(mb:Multi Bytes)
Mbstring擴展針對的是一些關於字符統計:strlen只是針對標準交換碼ASCII,mtstring會針對不一樣的字符集
1)轉換函數:implode(), explode(), str_split()
Implode(鏈接方式,數組):將數組中的元素按照某個規則鏈接成一個字符串
Explode(分割字符,目標字符串):將字符串按照某個格式進行分割,變成數組
Str_split(字符串,字符長度):按照指定長度拆分字符串獲得數組
2)截取函數:trim(), ltrim(), rtrim()
Trim(字符串[,指定字符]):自己默認是用來去除字符串兩邊的空格(中間不行),可是也能夠指定要去除的內容,是按照指定的內容循環去除兩邊有的內容:直到碰到一個不是目標字符爲止
Ltrim():去除左邊的
Rtrim():去除右邊的
3)截取函數:substr(), strstr()
Substr(字符串,起始位置從0開始[,長度]):指定位置開始截取字符串,能夠截取指定長度(不指定到最後)
Strstr(字符串,匹配字符):從指定位置開始,截取到最後(能夠用來去文件後綴名)
4)大小轉換函數:strtolower(), strtoupper(), ucfirst()
Strtolower:所有小寫
Strtoupper:所有大寫
Ucfirst:首字母大寫
5)查找函數:strpos(), strrpos()
Strpos(字符串,匹配字符):判斷字符在目標字符串中出現的位置(首次)
Strrpos(字符串,匹配字符):判斷字符在目標字符串中最後出現的位置
6)替換函數:str_replace()
Str_replace(匹配目標,替換的內容,字符串自己):將目標字符串中部分字符串進行替換
7)格式化函數:printf(), sprintf()
Printf/sprintf(輸出字符串有佔位符,順序佔位內容…):格式化輸出數據
8)其餘:str_repeat(), str_shuffle()
Str_repeat():重複某個字符串N次
Str_shuffle():隨機打亂字符串
在PHP中系統提供多種定義數組的方式:
一、 使用array關鍵字:
最經常使用的 $變量 = array(元素1,元素2,元素3…);
二、 可使用中括號來包裹數據:
$變量 = [元素1,元素2…];
三、 隱形定義數組:
給變量增長一箇中括號,系統自動變成數組
$變量[] = 值1; //若是不提供下標也能夠,系統自動生成(數字:從0開始)
$變量[下標] = 值; //中括號裏面的內容稱之爲下標key,該下標能夠是字母(單詞)或者數字,與變量命名的規則類似
PHP數組特色
1) 能夠整數下標或者字符串下標 若是數組下標都爲整數:索引數組 若是數組下標都爲字符串:關聯數組
2) 不一樣下標能夠混合存在:混合數組
3) 數組元素的順序以放入順序爲準,跟下標無關
4) 數字下標的自增加特性:從0開始自動增加,若是中間手動出現較大的,那麼後面的自增加元素從最大的值+1開始
5) PHP中數組元素沒有類型限制
6) PHP中數組元素沒有長度限制
補充:PHP中的數組是很大的數據,因此存儲位置是堆區,爲當前數組分配一塊連續的內存。
特殊下標的轉換:
[false]:[1],[true]:[0],[NULL]:[""]
二維數組:數組中全部的元素都是一維數組
多維數組
在第二維的數組元素中能夠繼續是數組,在PHP中沒有維度限制(PHP本質並無二維數組)
可是,不建議使用超過三維以上的數組,會增長訪問的複雜度,下降訪問效率。 異形數組(不規則數組)
異形數組:數組中的元素不規則,有普通基本變量也有數組。 在實際開發中,並不經常使用,儘可能讓數組元素規則化(便於進行訪問)
Foreach遍歷
若是是關聯數組(字母下標),就須要下標,若是是數字下標就直接訪問值
獲取下標
在進行數據存儲定義的時候,一般二維數組不會兩個維度的key下標都爲數字,通常是一維爲數字(無心義),二維爲字符串(數據庫表字段),因此在進行遍歷的時候,一般是隻須要針對一維進行遍歷,取得二維數組元素,而後二維數組元素經過下標去訪問。
Foreach遍歷的原理:
本質是數組的內部有一顆指針,默認是指向數組元素的第一個元素,foreach就是利用指針去獲取數據,同時移動指針。
Foreach($arr as $k => $v){ //循環體 }
一、 foreach會重置指針:讓指針指向第一個元素;
二、 進入foreach循環:經過指針取得當前第一個元素,而後將下標取出放到對應的下標變量$k中(若是存在),將值取出來放到對應的值變量 $v中;(指針下移)
三、 進入到循環內部(循環體),開始執行; 四、 重複2和3,直到在2的時候遇到指針取不到內容(指針指向數組最後)
For循環遍歷數組 For循環:
基於已知邊界條件(起始和結束)而後有條件的變化(規律) 所以:for循環遍歷數組有對應條件
一、 獲取數組長度:count(數組)獲得數組元素的長度 二、 要求數組元素的下標是規律的數字
While配合each和list遍歷數組 While是在外部定義邊界條件,若是要實現能夠和for循環同樣。
Each函數使用:
each可以從一個數組中獲取當前數組指針所指向的元素的下標和值,拿到以後將數組指針下移,同時將拿到的元素下標和值以一個四個元素的數組返回:
0下標 – 》 取得元素的下標值 1下標 - 》 取得元素的值 Key下標 – 》取得元素的下標值 Value下標 – 》取得元素的值
若是each取不到結果(數組指針移動到最後),返回false
List函數使用:
list是一種結構,不是一種函數(沒有返回值),是list提供一堆變量去從一個數組中取得元素值,而後依次存放到對應的變量當中(批量爲變量賦值:值來源於數組):list必須從索引數組中去獲取數據,並且必須從0開始。
錯誤:
正確:
List與each配合特別好:
each必定有兩個元素就是0和1下標元素 List(變量1,變量2) =
each(數組);
是一種賦值運算,可是能夠獲得false結果(each取不到正確的結果),整個表達式爲false
1)排序函數:
對數組元素進行排序,都是按照ASCII碼進行比較,能夠進行英文比較 sort():順序排序(下標重排)
rsort():逆序排序
asort():順序排序(下標保留)
arsort():逆序排序
ksort():順序排序:按照鍵名(下標)
krsort():逆序排序
shuffle():隨機打亂數組元素,數組下標會重排
2)指針函數
reset():重置指針,將數組指針回到首位
end():重置指針,將數組指針指到最後一個元素
next():指針下移,取得下一個元素的值
prev():指針上移,取得上一個元素的值
current():獲取當前指針對應的元素值
key():獲取當前指針對應的下標值
注意事項:next和prev會移動指針,有可能致使指針移動到最前或者最後(離開數組),致使數組不能使用,經過next和prev不能回到真確的指針位置。只能經過end或者reset進行指針重置
3)其餘函數
count():統計數組中元素的數量
array_push():往數組中加入一個元素(數組後面)
array_pop():從數組中取出一個元素(數組後面)
array_shift():從數組中取出一個元素(數組前面)
array_unshift():從數組中加入一個元素(數組前面)
PHP模擬數據結構: 棧:壓棧,先進去後出來(FILO)
隊列:排隊,先進去的先出去(FIFO)
array_reverse():數組元素反過來
in_array():判斷一個元素在數組中是否存在
array_keys():獲取一個數組的全部下標,返回一個索引數組
array_values():獲取一個數組的全部值,返回一個索引數組