php动态获取函数参数

一、总结

一句话总结:a、PHP 在用户自定义函数中支持可变数量的参数列表。其实很简单,只需使用 func_num_args() , func_get_arg() ,和 func_get_args()  函数即可。

 <?php
function demo ()
{
$numargs = func_num_args ();
echo "参数个数为: $numargs \n" ;
}
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动态支持函数参数

用默认参数,如果调用函数的时候传递的是非数组参数,就用非数组的方式传入参数,否则用数组的方式传入参数

 //用于给用户的某种属性增加或者减少值(最后一个数组参数可用于传递数组数据)
public function operateUserAttr($muid,$attrName=null,$num=null,$paramArr=null){
$user=$this->getUserById($muid);
if($attrName&&$num){
$user[$attrName]+=$num;
}else if($paramArr){
//传入参数为数组的情况
foreach ($paramArr as $key=>$val){
$user[$key]+=$val;
}
}
$ans=db('myself_user')->update($user);
if($ans===false) return false;
else return true;
}

调用

 //4、测试用户模型的增加属性方法
public function test3(){
$modelUser=new ModelUser();
$muid=base64_decode(session('muid'));
$ans=$modelUser->operateUserAttr($muid,null,null,['mu_programme'=>10,'mu_luck'=>20]);
}
 

php中如何动态获取函数的参数的更多相关文章

  1. .Net CLR GC动态获取函数头地址,C++的骚操作(慎入)

    前言: 太懒了,从没有在这里正儿八经的写过文章.看到一些人的高产,真是惭愧.决定稍微变得不那么懒.如有疏漏,请指正. .net的GC都谈的很多了,本篇主要是剑走偏锋,聊聊一些个人认为较为核心的细节方面 ...

  2. php动态获取函数参数

    PHP 在用户自定义函数中支持可变数量的参数列表.其实很简单,只需使用 func_num_args() , func_get_arg() ,和 func_get_args()  函数即可. 可变参数并 ...

  3. PHP实现动态获取函数参数的方法

    1. func_num_args — 返回传入函数的参数总个数 int func_num_args ( void ) 示例 <?php function demo () { $numargs = ...

  4. PHP中CURL方法curl_setopt()函数的参数

    PHP CURL curl_setopt 参数 bool curl_setopt (int ch, string option, mixed value)curl_setopt()函数将为一个CURL ...

  5. 旧书重温:0day2【4】动态获取函数地址

    通过以上3篇文章的学习,我们已经可以获取到kernel32.dll的地址了下一步 我们就是获取几个重要的函数 1.GetProcAddress 2.LoadLibrary 有了这两个函数很多函数都可以 ...

  6. Python中使用PyCharm为函数及参数增加注释

    在函数名中键入数遍光标,左上角亮起小灯泡,点击小灯泡 选中第二行内容 在"""后添加函数注释,以及参数注释 然后再引用函数时,选中函数,Ctrl q  即可显示函数以及参 ...

  7. Angular中通过$location获取地址栏的参数详解

    Angular中通过$location获取url中的参数 最近,项目开发正在进行时,心有点燥,许多东西没来得及去研究,今天正想问题呢,同事问到如何获取url中的参数,我一时半会还真没想起来,刚刚特意研 ...

  8. js中获取函数的参数

    刘海波 2015/2/11 9:11:43 tmp = tmp.replace(/\{(\d+)\}/g, function($1, $2) {return addrow.arguments[pars ...

  9. JS模式--装饰者模式(用AOP动态改变函数的参数)

    Function.prototype.before = function (beforefn) { var _self = this; return function () { beforefn.ap ...

随机推荐

  1. HDFS 断点续传,写文件功能

    实际上这是个 HDFS 的工具类部分代码. 首先 public static Configuration configuration = null;public static FileSystem f ...

  2. 编译impala、拓展impala语法解析模块

    以前也编译过,但是每次编译都忘记怎么做,然后都得重新找需要下载的文件. 编译文件:buildall.sh 如果想只编译前端可以这样运行: buildall.sh -fe_only 编译时会去S3下载一 ...

  3. iOS framework配置脚本

    # Sets the target folders and the final framework product. FMK_NAME=HovnVoipEngine FMK_VERSION=1.0 # ...

  4. cocos2d-x 3.0正式版 vs2013配置

    cocos2d-x 3.0正式版与之前的版本号差异较大,曾经的教程非常多都不使用了. 1.从cocos2d-x官网http://www.cocos2d-x.org下载3.0版的压缩包,随便解压一个位置 ...

  5. Bit、Byte、kb、KB、MB、KiB、MiB各表示什么意思?

    1.Byte.bit:bit表示:位,是计算机中最小的数据单位.每一位的状态只能是0或1Byte表示:字节,8个二进制位构成1个字节,即1 Byte = 8 bit .1个英文字母或者数字占用1个字节 ...

  6. Flex 编译器及编译步骤

    通过为Flex项目添加编译器参数:-keep-generated-actionscript=true 可以看到经过编译器处理过的源程序文件集合. 在这些文件的文件名中包含有“xxx-generated ...

  7. 解决MyEclipse中安装或升级ADT之后SDK Target无法显示的问题

        故障现象,在MyEclipse里面安装完最新的android sdk和ADT之后,无法新建项目,Build Target为空,显示一直在loading.即如下面图里面显示的,Target Na ...

  8. 控制div固定在页面的某个位置 ,用js感觉很麻烦 CSS更好一些

    CSS代码:<style type="text/css"> html,body { width:100%; height:100%; margin:0px; paddi ...

  9. wampserver-mysql创建数据库

    首先打开wampserver,在右下角会出现一个这样的图标,左键单击它,选择MYSQL->MYSQL控制台 输入密码 创建一个新的数据库:create database XXX 注意要输“;”, ...

  10. windows下plsql 设置 里面timestamp显示的格式

    http://blog.csdn.net/cwjcsu/article/details/9216981