php中的函數____函數

來源:互聯網
上載者:User

                                                     php中的函數

  函數,由於php是弱類型的語言,這不但使得php變數與眾不同,同時也使得php函數也變得與眾不同。
     在php中函數的聲明方式很簡單:如下
           function  fcuntion_name([參數列表])
           {
           }   
函數可以分為這麼幾類:
(1).常規參數函數,就是參數中規中矩。在函數該變參數的值,對原變數無影響。
 
(2).引用參數的函數,即傳入的參數是某個參數的引用,在函數中改變參數的值,對原變數的值有影響。但是用unset()函數登出函數中的引用變數
    只是登出了函數中的對應的變數不會登出原變數。如下:
           $t=2;
          function  test(&$m)
           {  
              $m=5
               unset($m)
           }
            test($t);
  echo $t;  //輸出5,即改變引用參數的值會改變原變數的值,但是在函數中登出引用參數,只是登出了引用參數指向原變數地址,而不是登出了原變數。
  
(3).預設參數函數,即在函數定義時,就對一些參數進行賦值,預設參數從右向左排列。如
            function  user( $name ,$pwd=123 ,$stu_no='20132577' )
             {  
             }
  在調用時,要是沒有對已經有預設值的參數賦值,則使用該參數的預設值。要是在調用時對預設參數賦值了,則覆蓋原來的預設值。
  
(4).可變參數個數的函數,即函數的參數在定義時是不定的,在調用函數時,才可以確定參數個數。
    這樣的函數需要,使用php系統內建的函數 func_get_args()獲得調用函數時,包含輸入的所有參數的數組。
或者通過func_num_args()獲得調用函數時,輸入參數的個數。和配合func_get_arg($index)獲得指定位置的輸入參數。
定義方式如下:
            function  test()
            {
                 $args=func_get_args(); //一次性獲得包含所有的輸入參數的數組, 
                for($i=0;$i<$count($args);$i++)
                {
                    ......

                }
            }
或者是通過指定位置,獲得相應的參數。
            function  test()
            {
               $length=func_num_args(); //獲得輸入參數的個數, 
               for($i=0;$i<$length);$i++)
                {
                   $arg=func_get_arg($i);//根據參數索引獲得參數值。
                }
             }
 
 (5).變數函數,變數函數其實和可變變數是一樣的原理。
     如:定義一個函數 test()
             function  test()
              {
              }
           $t='test';//我們可以稱他為變數函數,該變數的值是一個函數名的字串。$t();//調用函數test()
 
 (6).回呼函數,回呼函數就是使用變數函數作為參數,實現函數功能的擴充。
   如定義一個user函數和一個identiyt函數如:
            function identiyt()
            {
            }
 
           function user($function_variable)
           {
             $function_variable();//user函數回呼函數名為$function_variable的函數。
           }
 
           $function_variable='identiyt';
           user($function_variable);//回調identity函數。
 
 一般我們還可以通過系統函數 call_user_func_array([變數函數],[參數數組])自訂回呼函數
           function t()
          {
              echo"t function <be />";
          }
          function y($fun)
          {
             call_user_func_array($fun,array());
             //echo"y function <br />";
           }
          y('t');
        以上使用call_user_func_array()函數,只是調用了全域函數,並不能調用類中的函數,類中靜態函數。那類中定義的函數和靜態函數如何調用呢。
        類中的函數:以上使用call_user_func_array( array(new class(),function_name) ,array([參數]))
         類中的靜態函數: 類中的函數:以上使用call_user_func_array(array(class,function_name),array([參數]))

(7)匿名函數,也叫做閉包函數,與js中的匿名函數是一樣的。
         $t=function (){};//將匿名函數賦值給一個變數$t
         $t();//調用匿名函數。

(8)閉包

       閉包可以從父範圍中繼承變數。任何此類變數都應該用 use 語言結構傳遞進去。怎麼理解呢。  因為我們知道在函數中定義的變數是局部變數,那麼在函數中再定義一個閉包函數(匿名函數),這個閉包函數是無法是直接從他的父函數中繼承變數的,因為閉包函數有無法像父函數那樣通過global擷取全域變數那樣來從父函數中獲得在父函數中定義的變數,所以閉包函數需要一種新的繼承方式,這種方式叫做閉包。關鍵字為use
      例如:
 function add1()
{
        $a=10;
        $b=20;
        $callback=function() use($a,$b)//通過use 繼承父函數中的兩個變數,要是不僅想獲得變數的值,還想改父函數的變數,
 {                              //通過繼承變數的引用如 use(&$a,&$b)
       echo $a+$b;
        };
        $callback();
 }
            add1();
閉包有一個好處,就是通過繼承父函數中變數的引用,可以減少迴圈次數。
 
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.