0.7 PHP 函數(shù)


函數(shù)是可以在程序中重復使用的語句塊刁绒,在頁面加載時函數(shù)不會立即執(zhí)行客年,只有在被調用時才會執(zhí)行蛾找。

//無返回值
function (par1,par2,par3...){
    code;
}
//有返回值
function (par1,par2,par3...){
    return result;
}

在代碼執(zhí)行過程中娩脾,如果遇到函數(shù)則會進入函數(shù)作用域,直到遇到 return 或執(zhí)行完畢后打毛,回到外層函數(shù)名的位置柿赊,繼續(xù)執(zhí)行后面的代碼。

temp.png

  • 參數(shù)
  • 形參
    1. 形參一定是變量名幻枉;
function dosomething($par1,$par2){}   // √
function dosomething($par1,par2){}    // ×

2. 只在當前函數(shù)中有效碰声;

<?php
function dosomething($par1){
        echo $par1;       // √
}
dosomething('11');  // 11
echo $par1;         // ×

3. 設置默認參數(shù);

function dosomething($a,$b=2){    //$b=2 為默認參數(shù)設置
        $result=$a*$b;
        return $result;
}
echo dosomething(2,4);      //8
$box1=dosomething(199);     //398
echo $box1;

▁ 參數(shù)默認值不能為對象熬甫、資源類型胰挑;
▁ 在低版本中,參數(shù)不能直接傳遞變量,需要使用 & 符號瞻颂;

  • 實參
    1. 實參可以是標量脚粟、變量;
    2. 實參跟形參應一一對應蘸朋;
  • 參數(shù)數(shù)量
    1. 實參多于形參時不會報錯(多數(shù)語言會報錯)核无;
    2. 實參少于形參,并且沒有或默認參數(shù)不夠的情況下會報錯藕坯;
    3. 實參少于形參团南,但是默認參數(shù)可以對應的情況下不會報錯;
  • 未定參數(shù)
    ◇  func_get_agrs():獲取函數(shù)內所有的實參炼彪,返回一個數(shù)組吐根;
    ◇  func_get_agr(n):獲取第 n 個參數(shù),n 的起始下標 0辐马;
    ◇  func_num_agrs():獲取所有實參的長度拷橘;
<?php
function sum(){
        $result=0;
        foreach(func_get_args() as $i){
            $result+=$i;
        }
        echo func_num_args()." , ";
        return $result;
}
echo sum(1,23,4,32,4,2);    //6, 66
echo '<hr/>';
echo sum(1,2);    //2, 3
echo '<hr/>';
echo sum(123,1);    //2, 124
  • 特殊函數(shù)
  • 可變函數(shù):如果一個變量名后面有括號,PHP 將尋找與該變量值同名的函數(shù)喜爷,并且嘗試執(zhí)冗疮。"可變函數(shù)" 還可以用來實現(xiàn)包括回調函數(shù)、函數(shù)表在內的一些用途檩帐。
<?php
function func1($a,$b){
        return $a*$b;
}
$fc="func1";
echo $fc(2,4);
  • 匿名函數(shù):匿名函數(shù)也叫閉包函數(shù)术幔,允許臨時創(chuàng)建一個沒有指定名稱的函數(shù)。
    最經(jīng)常用作回調函數(shù) callback 參數(shù)的值湃密。
    ◇  賦值形式:
<?php
$greet=function($name){
        printf("Hello %s",$name);
};
$greet('World');    //hello world
$greet('PHP');      //hello PHP

◇  參數(shù)形式:

<?php
$arrs=[1,2,3,1,5,1,51,121];
$fn=call_user_func_array(function(){
        $a=func_get_args();
        $sum=0;
        foreach ($a as $i){
            $sum+=$i;
        }
        return $sum;
},$arrs);
echo $fn;   //185
  • printf() 函數(shù)诅挑、及其他相關函數(shù)可 參考
作用域
局部作用域 全局作用域 超全局作用域 靜態(tài)局部作用域
  • 作用域中的變量
/* 各自獨立 */
<?php
$overall=100;
function dosomething(){
      $locals=998;
      echo $overall;    //Undefined 
}
dosomething();
echo $locals;      //Undefined 
————————————————————————————————————————
/* 互不影響 */
<?php
$thisOne=100;
function dosomething(){
      $thisOne=1;
      echo $thisOne;    //1
}
dosomething();
echo $thisOne;     //100
  • 訪問全局變量
  • 使用 global 關鍵字:
<?php
$thisOne=100;
function dosomething(){
        global $thisOne;
        $thisOne++;
        echo $thisOne;    //100
}
dosomething();
echo $thisOne        //101
  • 使用 $GLOBALS 全局數(shù)組:
<?php
$thisOne=100;
function dosomething(){
        echo $GLOBALS['thisOne'];           //100
        $GLOBALS['thisOne']++;
        echo "<hr/>".$GLOBALS['thisOne'];   //101
}
dosomething();
echo "<hr/>$thisOne";    //101

◇ 通過 $GLOBALS 數(shù)組創(chuàng)建全局變量:

<?php
$thisOne=100;
function dosomething(){
        echo $GLOBALS['thisOne'];
        $GLOBALS['thisTwo']=200;
        echo $thisTwo;             //Undefined  不能直接訪問
        echo $GLOBALS['thisTwo'];  //在局部中只能通過數(shù)組鍵名訪問
}
dosomething();
echo "<hr/>$thisTwo";    //200 成功

◇ 通過 global 創(chuàng)建全局變量:

<?php
function dosomething(){
        global $some;
        $some=9;
        echo $some;   //9
}
dosomething();
echo $some;      //9
  • 檢測函數(shù)是否被定義: function_exists()
<?php
function testfunc(){
      echo '已定義';
}
if(function_exists('testfunc')){    //true
      testfunc();
}
函數(shù)的編程思想
  • 遞歸思想
      要解決一個復雜的問題泛源,根據(jù)現(xiàn)實邏輯拔妥,可以通過多個子類問題的答案解決,而這些子類問題又可以通過多個小問題解決达箍,以此類推...一直到最小的問題没龙,通常都會是一個已知的數(shù)據(jù)。
<?php
function demo(){
      static $i=1;
      echo "$i,";
      $i++;
      if($i<10){
          demo();    //簡單講:遞歸就是在調用自己
      }
}
demo();    //1,2,3,4,5,6,7,8,9幻梯,
f.png
  • 階乘案例
//求未知數(shù)的階乘
<?php
function factorial($n){
        if($n==1){
            return 1;
        }
        $result=factorial($n-1)*$n;
        return $result;
}
echo factorial(3);    //6
  • 遞推思想(迭代思想)
      要解決一個復雜的問題兜畸,如果能得知最小問題的答案(通常是已知),根據(jù)算法得出上級問題的答案碘梢,以此類推一直推算到可以解決復雜問題咬摇。
  • 遞推圖例


    temp.png
  • 斐波那契數(shù)列
<?php
function fibonacci($n){
        $n1=1;      //數(shù)列的第一個初始數(shù),代表求值的上兩個數(shù)
        $n2=1;      //數(shù)列的第一個初始數(shù)煞躬,代表求值的上一個數(shù)
        $result=0;
        for($i=3;$i<=$n;$i++){
            $result=$n1+$n2;
            $n1=$n2;    //數(shù)據(jù)輪換
            $n2=$result;    //數(shù)據(jù)輪換
        }
        return $result;
}
echo fibonacci(3);  //第3項的結果為:2
echo fibonacci(4);  //第4項的結果為:3
echo fibonacci(5);  //第5項的結果為:5
echo fibonacci(6);  //第6項的結果為:8

▁ 遞歸推算規(guī)則:從大到小肛鹏,再回歸到大逸邦;
▁ 遞推推算規(guī)則:從小到大;
▁ 在兩種方法都能解決問題時在扰,優(yōu)先使用遞推解決缕减;

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市芒珠,隨后出現(xiàn)的幾起案子桥狡,更是在濱河造成了極大的恐慌,老刑警劉巖皱卓,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件裹芝,死亡現(xiàn)場離奇詭異,居然都是意外死亡娜汁,警方通過查閱死者的電腦和手機嫂易,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來掐禁,“玉大人怜械,你說我怎么就攤上這事「凳拢” “怎么了缕允?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長享完。 經(jīng)常有香客問我灼芭,道長有额,這世上最難降的妖魔是什么般又? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮巍佑,結果婚禮上茴迁,老公的妹妹穿的比我還像新娘。我一直安慰自己萤衰,他們只是感情好堕义,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著脆栋,像睡著了一般倦卖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上椿争,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天怕膛,我揣著相機與錄音,去河邊找鬼秦踪。 笑死褐捻,一個胖子當著我的面吹牛掸茅,可吹牛的內容都是我干的。 我是一名探鬼主播柠逞,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼昧狮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了板壮?” 一聲冷哼從身側響起逗鸣,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎绰精,沒想到半個月后慕购,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡茬底,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年沪悲,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阱表。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡殿如,死狀恐怖,靈堂內的尸體忽然破棺而出最爬,到底是詐尸還是另有隱情涉馁,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布爱致,位于F島的核電站烤送,受9級特大地震影響,放射性物質發(fā)生泄漏糠悯。R本人自食惡果不足惜帮坚,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望互艾。 院中可真熱鬧试和,春花似錦、人聲如沸纫普。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽昨稼。三九已至节视,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間假栓,已是汗流浹背寻行。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留但指,地道東北人寡痰。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓抗楔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親拦坠。 傳聞我的和親對象是個殘疾皇子连躏,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內容