国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

前端學PHP之函數(shù)

2020-03-22 19:57:09
字體:
供稿:網(wǎng)友

  • 前面的話

      PHP 的真正力量來自它的函數(shù):它擁有超過 1000 個內(nèi)建的函數(shù)。本文將詳細介紹php函數(shù)

      [注意]關(guān)于javascript函數(shù)的詳細內(nèi)容移步至此

    函數(shù)定義

      除了內(nèi)建的 PHP 函數(shù),可以創(chuàng)建我們自己的函數(shù)。函數(shù)是可以在程序中重復使用的語句塊。頁面加載時函數(shù)不會立即執(zhí)行。函數(shù)只有在被調(diào)用時才會執(zhí)行。

      用戶定義的函數(shù)聲明以關(guān)鍵字 'function' 開頭,函數(shù)名和 PHP 中的其它標識符命名規(guī)則相同。有效的函數(shù)名以字母或下劃線打頭,后面跟字母,數(shù)字或下劃線

    function functionName() {  被執(zhí)行的代碼;}
    <?phpfunction writeMsg() {  echo 'Hello world!';}writeMsg(); // 調(diào)用函數(shù)?>

    函數(shù)參數(shù)

      可以通過參數(shù)向函數(shù)傳遞信息,參數(shù)類似變量。參數(shù)被定義在函數(shù)名之后,括號內(nèi)部。可以添加任意多參數(shù),只要用逗號隔開即可

    <?phpfunction familyName($fname) {  echo '$fname Zhang.<br>';}familyName('Li');familyName('Hong');familyName('Tao');familyName('Xiao Mei');familyName('Jian');?>

    引用傳遞

      默認情況下,函數(shù)參數(shù)通過值傳遞。如果希望允許函數(shù)修改它的參數(shù)值,必須通過引用傳遞參數(shù)

      如果想要函數(shù)的一個參數(shù)總是通過引用傳遞,可以在函數(shù)定義中該參數(shù)的前面加上符號 &

    <?phpfunction add_some_extra(&$string){    $string .= 'and something extra.';}$str = 'This is a string, ';add_some_extra($str);echo $str;    // outputs 'This is a string, and something extra.'?>

    默認參數(shù)

      函數(shù)可以定義 C++ 風格的標量參數(shù)默認值

    <?phpfunction setHeight($minheight=50) {  echo 'The height is : $minheight <br>';}setHeight(350);setHeight(); // 將使用默認值 50setHeight(135);setHeight(80);?>

      PHP 還允許使用數(shù)組 array 和特殊類型 NULL 作為默認參數(shù)

    <?phpfunction makecoffee($types = array('cappuccino'), $coffeeMaker = NULL){    $device = is_null($coffeeMaker) ? 'hands' : $coffeeMaker;    return 'Making a cup of '.join(', ', $types).' with $device.';}echo makecoffee();echo makecoffee(array('cappuccino', 'lavazza'), 'teapot');?>

      [注意]當使用默認參數(shù)時,任何默認參數(shù)必須放在任何非默認參數(shù)的右側(cè);否則,函數(shù)將不會按照預(yù)期的情況工作

    可變參數(shù)

    【func_get_args()】

      func_get_args()相當于javascript函數(shù)中的arguments,以數(shù)組形式保存著實參

    function demo(){    $arr = func_get_args();    $sum = 0;    for($i = 0; $i<count($arr); $i++){        $sum += $arr[$i];    }    return $sum;}//45echo demo(1,2,3,4,5,6,7,8,9);

      此外,還有兩個常用的函數(shù)func_num_args()和func_get_arg()

      func_num_args()函數(shù)返回參數(shù)總數(shù)

      func_get_arg()函數(shù)接收一個數(shù)字參數(shù),返回指定參數(shù)

    function more_args() {               for($i=0; $i<func_num_args(); $i++) {         echo '第'.$i.'個參數(shù)是'.func_get_arg($i).'<br>';    }}more_args('one', 'two', 'three', 1, 2, 3); 

    返回值

      如需使函數(shù)返回值,使用 return 語句。如果省略了return,則返回值為 NULL

    <?phpfunction sum($x,$y) {  $z=$x+$y;  return $z;}echo '5 + 10 = ' . sum(5,10) . '<br>';echo '7 + 13 = ' . sum(7,13) . '<br>';echo '2 + 4 = ' . sum(2,4);?>

    變量函數(shù)

      變量函數(shù)也叫可變函數(shù)。如果一個變量名后有圓括號,PHP 將尋找與變量的值同名的函數(shù),并且嘗試執(zhí)行它。可變函數(shù)可以用來實現(xiàn)包括回調(diào)函數(shù),函數(shù)表在內(nèi)的一些用途

      [注意]可變函數(shù)不能用于例如 echo,print,unset(),isset(),empty(),include,require 以及類似的語言結(jié)構(gòu)。需要使用自己的包裝函數(shù)來將這些結(jié)構(gòu)用作可變函數(shù)

    <?phpfunction foo() {    echo 'In foo()<br />';}function bar($arg = '') {    echo 'In bar(); argument was '$arg'.<br />';}// 使用 echo 的包裝函數(shù)function echoit($string){    echo $string;}$func = 'foo';$func();        // This calls foo()$func = 'bar';$func('test');  // This calls bar()$func = 'echoit';$func('test');  // This calls echoit()?>

    回調(diào)函數(shù)

      回調(diào)函數(shù)是指將一個函數(shù)的函數(shù)名作為參數(shù)傳到另一個函數(shù)中,這個函數(shù)被稱為回調(diào)函數(shù)

    function demo($num,$n){    for($i=0;$i<$num;$i++){        if($n($i)){            echo $i.'<br>';        }    }}function test($i){    if($i%5){        return true;    }}demo(20,'test');

    call_user_func_array

      使用call_user_func_array可以調(diào)用回調(diào)函數(shù),并把一個數(shù)組參數(shù)作為回調(diào)函數(shù)的參數(shù)

    mixed call_user_func_array ( callable $callback , array $param_arr )

      把第一個參數(shù)作為回調(diào)函數(shù)(callback)調(diào)用,把參數(shù)數(shù)組作(param_arr)為回調(diào)函數(shù)的的參數(shù)傳入

    function demo($num,$n){    for($i=0;$i<$num;$i++){        if(call_user_func_array($n,array($i))){            echo $i.'<br>';        }    }}function test($i){    if($i%5){        return true;    }}demo(20,'test');

      實現(xiàn)回調(diào)函數(shù)時,通常要使用call_user_func_array()函數(shù),而不是變量函數(shù),因為變量函數(shù)無法傳遞對象中的方法或和類中的靜態(tài)方法

    function demo($num, $n) {    for($i=0; $i<$num; $i++) {        if(call_user_func_array($n, array($i))){            echo $i.'<br>';        }        }}    html' target='_blank'>class Filter {    function one($i) {        if($i%3==0) {            return true;        }    }    static function two($i) {        if(preg_match('/3/', $i)) {            return true;        }    }}demo(500, array(new Filter(), 'one'));demo(500, array('Filter', 'two'));

    遞歸函數(shù)

      在函數(shù)中調(diào)用自己就是遞歸函數(shù)

    <?php    function test( $n ) {                    echo $n;         if($n>0){            test($n-1);                           }           echo $n;     }    test(5);//543210012345?>

    加載函數(shù)庫

      使用include()函數(shù)來引入外部文件

    test.phpfunction one(){    echo '111';}<?phpinclude ('test.php');one();//111?>

      但如果不慎引入多次,使得函數(shù)重定義,變量重新賦值,會造成錯誤

    test.phpfunction one(){    echo '111';}<?phpinclude ('test.php');include ('test.php');one();//111?>

      此時,需要使用include_once()函數(shù),來保證相同的文件只被引入一次

    test.phpfunction one(){    echo '111';}<?phpinclude_once('test.php');include_once('test.php');one();//111?>

    require()

      引入外部文件,還可以使用require()。include( )與require( )幾乎等價,區(qū)別在于在腳本執(zhí)行時包含,當處理失敗時,include( )產(chǎn)生一個警告而require( )則導致一個致命錯誤

      [注意]require_once()與include()_once也類似

    匿名函數(shù)

      匿名函數(shù)(Anonymous functions),也叫閉包函數(shù)(closures),允許 臨時創(chuàng)建一個沒有指定名稱的函數(shù)。最經(jīng)常用作回調(diào)函數(shù)(callback)參數(shù)的值

      其實,php的匿名函數(shù)類似于javascript中的函數(shù)表達式

      [注意]匿名函數(shù)結(jié)尾一定要加分號,否則會報錯

    <?php$greet = function($name){    printf('Hello %s', $name);};$greet('World');$greet('PHP');?>

    閉包

      PHP閉包實現(xiàn)主要就是靠匿名函數(shù)

      將匿名函數(shù)在普通函數(shù)中當做參數(shù)傳入,也可以被返回。這就實現(xiàn)了一個簡單的閉包。

      閉包的兩個特點:

      1、作為一個函數(shù)變量的一個引用 - 當函數(shù)返回時,其處于激活狀態(tài)。

      2、一個閉包就是當一個函數(shù)返回時,一個沒有釋放資源的棧區(qū)。

      其實上面兩點可以合成一點,就是閉包函數(shù)返回時,該函數(shù)內(nèi)部變量處于激活狀態(tài),函數(shù)所在棧區(qū)依然保留

      閉包可以從父作用域中繼承變量。 任何此類變量都應(yīng)該用 use 語言結(jié)構(gòu)傳遞進去

    $message = 'hello';$example = function () use ($message) {    var_dump($message);};echo $example();//string 'hello' (length=5)
    PHP編程

    鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

  • 發(fā)表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發(fā)表
    主站蜘蛛池模板: 全州县| 嵩明县| 普兰店市| 富顺县| 手机| 唐山市| 项城市| 石狮市| 克东县| 保德县| 洛隆县| 宁波市| 始兴县| 蒲城县| 镇赉县| 即墨市| 偃师市| 剑川县| 广饶县| 南宫市| 新津县| 柳河县| 铁力市| 武功县| 沧州市| 礼泉县| 闽清县| 类乌齐县| 灵寿县| 浙江省| 宁津县| 鸡泽县| 安阳县| 宁陵县| 安溪县| 怀仁县| 金湖县| 渭源县| 彭山县| 新竹市| 龙川县|