函數的概述
函數的瞭解與學習
Ø 通俗的理解函數就是一個功能。
Ø 學習函數需要學習三點:
函數的作用
函數的參數
函數的
函數的分類
Ø 根據是否是系統自帶的:系統函數和自定義函數
Ø 根據是否具有返回值:帶返回值函數和執行過程函數
Ø 根據函數內部結構不同分爲:
一般函數
變量函數
回調函數
內部函數
遞歸函數
匿名函數
匿名回調函數
函數的定義方式
函數的定義格式
Ø 基本格式:
function 函數名(){
PHP語句(函數體)
}
Ø 函數的命名問題:
函數的姓就是function 不能省略
可以使用英文,不允許使用中文
可以使用數字,但是數字不能開頭
不能使用特殊字符,_除外
函數聲明要有意義
函數名不區分大小寫。
不可以和已經存在(系統函數 和自定義)的函數重名
Ø 函數的特徵:
函數定義之後,不調用不執行
函數調不分先後,因爲PHP解析器在執行頁面代碼之前就已經預先加載了函數的部分的內容
return語句的作用
Ø 具有return的函數就是有返回值的函數
Ø 沒有return的函數就稱之爲執行過程函數
u 作用1:
如果函數中存在return並且執行return語句,那麼該函數的執行結果就可以被變量接收。
u 作用2:
如果函數的執行過程中執行了return語句,那麼後續的代碼不在執行。
注意:一個函數中可以有多個return語句,但是程序只能執行一條,一般多個return語句都是使用分支結構分開存放
return和echo的區別
如果需要使用函數執行的結果,那麼在該函數中就需要加return語句,
如果不需要函數的運行結果,只是需要函數執行一次,那麼在該函數中可以選擇不加return語句。
echo 只是執行沒有實質性的東西
return 有實質性的東西
函數的參數
Ø 參數分爲形參和實參兩個部分
形參就是形式上的參數,在定義函數的括號中使用。
實參就是實際上的參數,在調用函數的括號中使用。
Ø 注意:
如果函數有定義形參,那麼調用函數時需要傳入對應的實參(形參沒有默認賦值)
如果函數同時具有形參的默認值,並且傳入了實參,那麼傳進來的值以實參值爲主(相當於變量賦值,用實參的值覆蓋了形參)
如果要傳入實參,必須和形參的位置一一對應
如果形參中具有多個形參有默認值,將最有可能傳入實參的形參放在前面
如果函數同時具有默認值的形參和沒有默認值的形參,那麼沒有默認值的形參一定要放到有默認值的形參前。
傳入的參數一定要和形參對應,免得出現邏輯問題
引用傳參
引用傳參就是變量的引用,內部發生變化,外部也發生變化。
Ø 在設定函數形參時,如果在形參變量之前添加&符號,就表示實參傳遞時要以引用傳遞的方式(變量引用賦值)將實參的值傳遞給形參
Ø 如果使用引用傳參,那麼函數內部的引用傳參的形參值發改變,對應的外部實參變量的值也會發生改變,效果類似於全局變量(但不是全局變量)
靜態變量
Ø 在函數內部使用static聲明的變量就是靜態變量。
Ø 靜態變量的特徵:
u 靜態變量只會被初始化一次(無論你調用多次函數都只會初始化一次)
u 靜態變量在函數運行結束後不會被回收
u 靜態變量一般用於計算函數調用次數
函數的變量作用域
函數的變量作用域就是函數相關的變量的作用範圍。
局部變量
Ø 在函數中定義的變量就是局部變量,其作用範圍僅限函數的內部。
Ø 形參也是函數內部的變量,也是局部變量。
普通變量
在函數的外部聲明的變量,其作用範圍就是當前頁面部分,函數內部無法使用,就是普通變量。
全局變量
在函數的內部和外部都可以訪問和使用的變量就是全局變量
Ø 實現全局變量方法1:
u 在函數外部有一個變量
u 在函數的內部也具有一個同名變量
u 在函數內部的同名的變量前使用global關鍵字修飾,既可以實現全局變量
注意:global聲明全局變量時禁止賦值
如果一個變量在函數內部已經賦值,以後使用global關鍵字進行全局化聲明,結果是該變量的值變爲函數外部變量的值。
Ø 實現全局變量方法2:
在函數的內部可以使用$GLOBALS[變量名]的方式直接調用函數外部的變量值,此時函數內外都可以使用,實現了另外一種方式的全局變量。
函數的分類
變量函數
當一個變量的值是某個函數的名稱字符串時,我們可以使用變量()的方式調用對應名稱的函數,這種調用方式就是變量函數。
u 例子:
$var =‘demo’;
function demo(){
PHP代碼
}
//變量函數的使用
$var(); //等價於demo();
回調函數
回調函數只是變量函數的一個變形,本質上還是變量函數的應用。
在一個函數(A函數)中,通過變量函數的方式$var();調用另外一個函數(B函數,C函數),而其函數名通過A函數中的變量函數$var();會根據用戶傳入不同的實參,回過頭調用不同名稱的其他函數(B函數,C函數)
u 格式:
function A($var){
$var();//回調函數要素1.變量函數
}
A('B')//回調函數要素2.傳入函數名稱字符串
內部函數
Ø 內部函數:在函數內部聲明的函數就是內部函數。(就是嵌套 )
u 在函數外部是否可以調用內部函數
不可以直接調用,但是如果調用外部函數之後,就可以任意調用內部函數。
u 在函數內部是否可以調用內部函數
可以調用,但是必須在內部函數定義之後調用。
u 內部函數的作用:
內部函數就是幫助外部函數完成一些子功能。
遞歸函數
在一個函數中調用當前函數本身,這種函數格式就是遞歸函數 (重點)
匿名函數
沒有名字的函數就是匿名函數
如果聲明一個函數,而該函數沒有函數名,那麼這個函數就是匿名函數
u 用法:用變量接收匿名函數
變量名 = function(){
函數體
};(注意:這裏必須有分號,這是表達式。)
//非匿命函數中沒有這個分號
Ø 匿名函數的高級應用 匿名回調函數
u 格式:
調用函數(匿名函數);
u 回調函數的區別:
n 以字符串方式傳入的回調函數
n 以匿名方式傳入的回調函數
n 字符串方式傳入的回調函數,該函數可以使用多次,任意調用,因爲這是個預先加載的普通函數。而匿名函數方式傳入的回調函數,只可以在當前回調函數中使用,其他地方無法使用
n 匿名函數的回調函數方式效率較高,回調函數運行完畢,匿名函數就被收回。而字符串傳入點的函數由於是預先加載的普通函數,所以在頁面沒有執行完畢時,不會被收回。
可變長度參數列表
在函數中,實參的實際傳入個數允許操作形參的個數,在情況下如果獲取所有傳入的實參,可以使用func_get_args()在函數的內部來獲取所有實參組成的數。在內部操作其他操作
文件包含
Ø include文件包含
u 作用:相當於將文件的內容複製到指定的文件當中。
u 常用語句包含函數庫文件或者配置文件。任何PHP文件都可以包含
Ø include_once 和include的區別:
include包含文件可以包含N次,而include_once只能包含一次
include的效率略高於include_once因爲include_once需要判斷
include包含文件成功,返回數值整型,但是include_once第一次包含文件返回 1,以後包含相同文件返回ture
Ø 格式:
include()函數格式
include''指令格式
include_once() 函數格式
include_once ' ' 指令格式
Ø require請求 需要
u 作用和include幾乎相同,將一個文件請求到另一個文件中。
Ø require_once 函數
u 作用:相當於require的方式,僅包含一次文件,功能類似與include_once 都是包含一次
Ø require和require_once的區別:
u 就相當於include和include_once的區別
Ø 格式:
require()函數格式
require '' 指令格式
require_once()函數格式
require_once '' 指令格式
Ø include 和require的區別
include包含文件如果包含失敗,提示warning級錯誤
require包含文件如果包含失敗,提示error級別的錯誤
include包含文件失敗,後續代碼繼續執行
require包含文件失敗,後續代碼將不再執行
PHP中的系統函數
數學函數
Ø abs();絕對值 負變正 正還是正
Ø ceil(); 進一法取整(不更改類型 是float還是float)
Ø round();對浮點數進行四捨五入(不更改類型)
u @param1 要四捨五入的小數
u @param2 可選參數,設置保留幾位小數
Ø floor(); 捨去法取整
Ø max(); 找出最大值
Ø min(); 找出最小值 注意:如果是0和純字符串來比較,誰在前,誰就是最小值
Ø mt_rand(); 生成一個更好的隨機數
Ø rand(); 生成一個隨機數
Ø pi();得到圓周率的值 3.14
Ø pow(); 指數表達式就是^這個數學操作
Ø sqrt(); 平方根函數 echo sqrt(9); //3
字符串函數
Ø chr(); 給出一個ascii值 返回指定的字符 根據阿斯克碼錶來返回
Ø ord(); 給一個字符返回一個阿斯克碼值(ascii)
u 需要記憶ascii值
u 48-57 -> 0-9
u 68-90 -> A-Z
u 97-122 -> a-z
Ø strlen(); 統計字符串的長度,或者說統計字符串中字符的個數
Ø chunk_split 將字符串分割成小塊
u @param1 要分割的字符串
u @param2 可選參數 幾個一分割
u @param3 可選參數 用於分割的字符
Ø explode(); 字符串切割成數組
u @param1 用什麼字符切割字符串
u @param2 要操作的字符串
u 返回值:按照切割字符串返回指定的數組
Ø implode(); 將數組鏈接成字符串
u @param1 需要連接字符串的字符
u @param2 要連接成字符串的數組
u 返回值:返回連接好後的字符串
Ø ltrim(); 刪除字符串左邊的空白或者預定義字符
Ø rtrim(); 刪除字符串右邊的空白或者預定義字符
Ø trim(); 刪除字符串兩邊的空白或者預定義字符
Ø str_replace ();字符串替換函數
u @param1 要查找的內容
u @param2 要替換的內容
u @param3 在哪個字符串或者數組中進行操作
u @param4 可選參數 返回替換的次數
u 返回值:返回替換後的新字符串或者新數組
Ø md5();字符串加密函數 只能加密 不能解密 一般用於密碼
Ø nl2br(); \n轉換br標籤
Ø str_shuffle(); 隨機打亂字符串的函數
Ø substr(); 截取字符串函數
u @param1 表示要截取的字符串
u @param2 表示從哪開始截取 如果是負數 表示從後往前數
u @param3 可選參數 表示截取幾位,如果是負數,表示保留幾位
Ø substr_count(); 統計一個字符串在另一個字符串中出現的次數
u @param1 要操作的字符串
u @param2 要查找的字符串
u @param3 可選參數 表示從第幾位下標開始查找
u @param4 可選參數 表示查找多長
Ø strstr(); 返回一個字符串在另一個字符串中從開始位置到結束位置的字符串
u @param1 要操作的字符串
u @param2 要查找的字符串
u @param 可選參數 如果設置爲true則返回查找字符串之前的字符
Ø strpos(); 查找字符串中某字符最先出現的位置
u @param1 要操作的字符串
u @param2 要查找的字符
u @param3可選參數,如果設置表示從第幾位開始查找
u 返回值:返回的是字符串的下標
Ø strrpos();尋找某字符串中某字符串最後出現的位置
u @param1 要操作的字符串
u @param2 要查找的字符
u @param3可選參數,如果設置表示從第幾位開始查找
u 返回值:返回的是字符串的下標
Ø strrchr(); 查找某字符串中最後一次出現的字符到末尾的字符串
u @param1 要操作的字符串
u @param2 要查找的字符
數組函數
Ø count();統計數組中的元素個數
Ø array_shift(); 刪除數組中的第一個元素
u @param1 引用的方式傳入實參數組變量
u 返回值:返回被刪除的第一個元素值
注意:以引用的方式傳入實參數組變量 證明實參值賦值給形參值後,形參值在函數內部發生改變,對應外部的實參值也會發生改變
Ø array_pop(); 刪除數組中最後一個元素
u @param1 引用的方式傳入實參數組變量
u 返回值:返回被刪除的最後一個元素值
Ø array_unshift(); 在數組的開頭插入一個或者多個元素
u @param1 要操作的數組
u @param2 要往數組開頭添加的值
u @..... 之後的參數任意多個 想添加幾個都行
u 返回值:返回新數組的長度
Ø array_push();在數組的末尾插入一個或者多個元素(該函數改變的是原有數組)
u @param1 要操作的數組
u @param2 要往數組末尾添加的值
u @..... 之後的參數任意多個 想添加幾個都行
u 返回值:返回新數組的長度
Ø in_array(); 在數組中搜索給定的值,區分大小寫(判斷一個字符串是否在數組中出現)
u @param1 需要搜索的值或字符串(區分大小寫)
u @param2 在那個數組中搜索
u 返回值:返回布爾值 true查找到 false 沒有查找到
Ø list(); 用數組元素爲一組變量賦值(只能是索引數組。就是重新給數組的下標賦值)
Ø array_slice(); 從數組中取出一段
u @param1 要操作的數組
u @param2 從那個下標開始取出
u @param3 可選參數,取出幾條
看函數手冊的經驗
Ø 常規函數
bool copy(string $source,string $dest)
Ø 帶有mixed的函數,表示可以傳任何類型的數據變量或者值都可以
bool chown(string $filename,mixed $user)
l 帶有&符的參數的函數,表示這個參數不能傳數值,只能傳一個變量,函數中將變量的值改變,我們在使用這個變量的時候也是變化的
bool sort(array &$array[, int $sort_flags=SORT_REGULAR])
Ø 帶有中括號[]函數,表示這個參數是可選的,如果你傳值了就用你傳的值,如果沒有傳真,就使用默認值也叫默認函數
bool sort(array &$array[, int $sort_flags = SORT_REGULAR])
Ø 帶有...的參數函數,表示可以傳任意多個參數
int array_unshift ( array &$array , mixed $var [, mixed $... ] )
Ø 帶有callable或者參數名叫$callback 的參數函數。表示這個位置需要傳入一個函數名稱字符串或者匿名函數做回調使用
array array_filter ( array $input [, callable $callback = "" ] )