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 }
