函式定義常量
define
define(“PI”,3.14);
使用const關鍵字
const PI= 3;
特殊常量
雙下劃線開始+常量名+雙下劃線結束,稱為魔術常量,魔術常量的值通常會跟著環境變化,但是不能改變
__DIR__:當前被執行腳本所在電腦的絕對路徑
__FILE__:當前被執行腳本所在電腦的絕對路徑(帶自己檔案的名字)
__LINE__:當前所屬的行數
__NAMESPACE__:當前所屬的命名空間
__CLASS__:當前所屬的類
__METHOD__:當前所屬的方法
自動轉換
echo $a +$b;
強制轉換
echo (float)$a,(float)$b;
型別判斷
var_dump(is_int($a));
var_dump(is_string($a));
資料判斷
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關鍵字:是一種在函式里面定義變數的一種方式
1、 如果使用global定義的變數名在外部存在(全域變數),那么系統在函式內部定義的變數直接指向外部全域變數所指向的記憶體空間(同一個變數);
2、 如果使用global定義的變數名在外部不存在(全域變數),系統會自動在全域空間(外部)定義一個與區域變數同名的全域變數

static:靜態變數
靜態變數的原理
系統在進行編譯的時候就會對static這一行為初始變數賦值,在函式呼叫的時候會自動跳過static這一行,所以$count++可以一直執行遞增
靜態變數的使用:
1.為了統計當前函式被呼叫的次數
2.為了統籌函式多次呼叫得到的不同結果(遞回思想)

可變函式在系統使用的程序中還是比較多的,尤其是使用很多系統函式的時候:需要用戶在外部定義一個自定義函式,但是是需要傳入到系統函式內部使用,
將一個用戶定于的函式傳入另外一個函式去使用的程序,稱之為回呼程序,被傳入的函式稱之為回呼函式

變數保存匿名函式,本質得到的是一個物件(Closure)

closure:閉包
函式內部有一些區域變數(要執行的代碼塊)在函式執行之后沒有被釋放,是因為在函式內部還有對應的函式在參考(函式的內部函式:匿名函式)

引號方式
比較適合定義那些比較短(不超過一行)或者沒有結構要求的字串 如果有結構要求,或者內容超過一行,可以使用以下兩種結構定義
nowdoc字串:沒有單引號的單引號字串 heredoc字串:沒有雙引號的雙引號字串

在PHP中系統常用的轉義符號
\’:在單引號字串中顯示單引號
\”:在雙引號字串中顯示雙引號
\r:代表回車(理論上是回到當前行的首位置)
\n:代表新一行
\t:類似tab鍵,輸出4個空格
$:在PHP中使用$符號作為變數符號,因此需要特定識別
單引號和雙引號的區別: 1、 其中單引號中能夠識別\’,而雙引號中就不能識別\’

2、 雙引號中因為能夠識別$符號,所以雙引號中可以決議變數,而單引號不可以

雙引號中變數識別的規則
1)變數本身系統能夠與后面的內容區分:應該保證變數的獨立性,不要讓系統難以區分
2)使用變數專業識別符號(區分),給變數加上一組大括號{}

結構化定義字串變數的規則
1、 結構化定義字串對應的邊界符有條件:
1.1 上邊界符后面不能跟任何內容;
1.2 下邊界符必須頂格:最左邊;
1.3 下邊界同樣后面只能跟分號,不能跟任何內容;
2、 結構化定義字串的內部(邊界符之間)的所有內容都是字串本身

基本函式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中系統提供多種定義陣列的方式
1、 使用array關鍵字:
最常用的 $變數 = array(元素1,元素2,元素3…);

2、 可以使用中括號來包裹資料:
$變數 = [元素1,元素2…];

3、 隱形定義陣列:
給變數增加一個中括號,系統自動變成陣列
$變數[] = 值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){ //回圈體 }
1、 foreach會重置指標:讓指標指向第一個元素;
2、 進入foreach回圈:通過指標取得當前第一個元素,然后將下標取出放到對應的下標變數$k中(如果存在),將值取出來放到對應的值變數 $v中;(指標下移)
3、 進入到回圈內部(回圈體),開始執行; 4、 重復2和3,直到在2的時候遇到指標取不到內容(指標指向陣列最后)
For回圈遍歷陣列 For回圈
基于已知邊界條件(起始和結束)然后有條件的變化(規律) 因此:for回圈遍歷陣列有對應條件
1、 獲取陣列長度:count(陣列)得到陣列元素的長度 2、 要求陣列元素的下標是規律的數字

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():獲取一個陣列的所有值,回傳一個索引陣列

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/270615.html
標籤:PHP
