php中如何動態獲取函數的參數


php動態獲取函數參數

一、總結

一句話總結:a、PHP 在用戶自定義函數中支持可變數量的參數列表。其實很簡單,只需使用 func_num_args() , func_get_arg() ,和 func_get_args()  函數即可。

 

1 <?php
2 function  demo ()
3 {
4     $numargs  =  func_num_args ();
5     echo  "參數個數為:  $numargs \n" ;
6 }
7 demo ( 'a' ,  'b' ,  'c' );

 

 

b、感覺默認參數也可以實現相同的功能

 1 //用於給用戶的某種屬性增加或者減少值(最后一個數組參數可用於傳遞數組數據)  2 public function operateUserAttr($muid,$attrName=null,$num=null,$paramArr=null){

 

 

1、php動態獲取函數參數的函數func_num_args() , func_get_arg() ,和 func_get_args()分別代表什么意思

a、func_num_args():獲取參數數量

    $numargs  =  func_num_args ();
    echo  "參數個數為:  $numargs \n" ;

 

b、func_get_arg():獲取哪個參數

 

echo  "第二個參數為: "  .  func_get_arg ( 1 ) .  "<br />" ;

 

 

c、func_get_args():獲取所有參數

    echo "傳入的參數分別為:";
    var_dump($args);

 

2、如何學習更簡便實用的php動態獲取函數參數?

可以去看thinkphp的框架的源碼,尤其是數據庫那一塊,那里說的很清楚。

 

 

二、php動態獲取函數參數

PHP 在用戶自定義函數中支持可變數量的參數列表。其實很簡單,只需使用 func_num_args() , func_get_arg() ,和 func_get_args()  函數即可。
可變參數並不需要特別的語法,參數列表仍按函數定義的方式傳遞給函數,並按通常的方式使用這些參數。 
 
1.func_num_args — 返回傳入函數的參數總個數
int func_num_args ( void )
示例
<?php
function  demo ()
{
    $numargs  =  func_num_args ();
    echo  "參數個數為:  $numargs \n" ;
}
demo ( 'a' ,  'b' ,  'c' );
運行結果
參數個數為: 3
 
2.func_get_args — 返回傳入函數的參數列表
array func_get_args  ( void )
示例
<?php
function  demo ()
{
    $args = func_get_args();
    echo "傳入的參數分別為:";
    var_dump($args);
}
demo ( 'a' ,  'b' ,  'c' );

運行結果

傳入的參數分別為:
array (size=3)
  0 => string 'a' (length=1)
  1 => string 'b' (length=1)
  2 => string 'c' (length=1)
 
3.func_get_arg — 根據參數索引從參數列表返回參數值
mixed  func_get_arg  ( int $arg_num  )
示例
<?php
function  demo ()
{
    $numargs  =  func_num_args ();
    echo  "參數個數為:  $numargs <br />" ;
    $args = func_get_args();
    if ( $numargs  >=  2 ) {
        echo  "第二個參數為: "  .  func_get_arg ( 1 ) .  "<br />" ;
    }
}
demo ( 'a' ,  'b' ,  'c' );
運行結果
參數個數為: 3
第二個參數為: b

 

參考:php動態獲取函數參數 - 雪山飛豬 - 博客園
https://www.cnblogs.com/chenqionghe/p/4817275.html

 

三、用函數默認參數實現php動態支持函數參數

用默認參數,如果調用函數的時候傳遞的是非數組參數,就用非數組的方式傳入參數,否則用數組的方式傳入參數

 1 //用於給用戶的某種屬性增加或者減少值(最后一個數組參數可用於傳遞數組數據)
 2 public function operateUserAttr($muid,$attrName=null,$num=null,$paramArr=null){
 3     $user=$this->getUserById($muid);
 4     if($attrName&&$num){
 5         $user[$attrName]+=$num;
 6     }else if($paramArr){
 7         //傳入參數為數組的情況
 8         foreach ($paramArr as $key=>$val){
 9             $user[$key]+=$val;
10         }
11     }
12     $ans=db('myself_user')->update($user);
13     if($ans===false) return false;
14     else return true;
15 }

 

調用

1 //4、測試用戶模型的增加屬性方法
2 public function test3(){
3     $modelUser=new ModelUser();
4     $muid=base64_decode(session('muid'));
5     $ans=$modelUser->operateUserAttr($muid,null,null,['mu_programme'=>10,'mu_luck'=>20]);
6 }

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM