php中如何动态获取函数的参数
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动态获取函数参数
int func_num_args ( void )
<?php
function demo ()
{
$numargs = func_num_args ();
echo "参数个数为: $numargs \n" ;
}
demo ( 'a' , 'b' , 'c' );
参数个数为: 3
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)
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中如何动态获取函数的参数的更多相关文章
- .Net CLR GC动态获取函数头地址,C++的骚操作(慎入)
前言: 太懒了,从没有在这里正儿八经的写过文章.看到一些人的高产,真是惭愧.决定稍微变得不那么懒.如有疏漏,请指正. .net的GC都谈的很多了,本篇主要是剑走偏锋,聊聊一些个人认为较为核心的细节方面 ...
- php动态获取函数参数
PHP 在用户自定义函数中支持可变数量的参数列表.其实很简单,只需使用 func_num_args() , func_get_arg() ,和 func_get_args() 函数即可. 可变参数并 ...
- PHP实现动态获取函数参数的方法
1. func_num_args — 返回传入函数的参数总个数 int func_num_args ( void ) 示例 <?php function demo () { $numargs = ...
- PHP中CURL方法curl_setopt()函数的参数
PHP CURL curl_setopt 参数 bool curl_setopt (int ch, string option, mixed value)curl_setopt()函数将为一个CURL ...
- 旧书重温:0day2【4】动态获取函数地址
通过以上3篇文章的学习,我们已经可以获取到kernel32.dll的地址了下一步 我们就是获取几个重要的函数 1.GetProcAddress 2.LoadLibrary 有了这两个函数很多函数都可以 ...
- Python中使用PyCharm为函数及参数增加注释
在函数名中键入数遍光标,左上角亮起小灯泡,点击小灯泡 选中第二行内容 在"""后添加函数注释,以及参数注释 然后再引用函数时,选中函数,Ctrl q 即可显示函数以及参 ...
- Angular中通过$location获取地址栏的参数详解
Angular中通过$location获取url中的参数 最近,项目开发正在进行时,心有点燥,许多东西没来得及去研究,今天正想问题呢,同事问到如何获取url中的参数,我一时半会还真没想起来,刚刚特意研 ...
- js中获取函数的参数
刘海波 2015/2/11 9:11:43 tmp = tmp.replace(/\{(\d+)\}/g, function($1, $2) {return addrow.arguments[pars ...
- JS模式--装饰者模式(用AOP动态改变函数的参数)
Function.prototype.before = function (beforefn) { var _self = this; return function () { beforefn.ap ...
随机推荐
- linux虚拟机拓展大小
http://blog.csdn.net/wutong_login/article/details/40147057?utm_source=tuicool http://www.linuxidc.co ...
- 多校第十场1009 CRB and String题解
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5414 题意:给你两个字符串s和t,你能够在字符串s中随意选一个字符c,在该字符c后插入一个字符d(d! ...
- ORA-01555错误总结(二)
这篇文章紧接着上一篇"ORA-01555错误总结(一)".主要描写叙述延迟块清除导致的ORA-01555错误. 以下是一些简介(上一遍已经介绍过) ORA-01555错误是一种在o ...
- 两个对象值同样(x.equals(y) == true),但却可有不同的hash code,这句话对不正确?
1.网上面试题 这是一道Java面试题.看了非常多答案都说不正确.能够看下面代码.就知道结果了 http://www.iteye.com/topic/485046第45题 答案是错误的 package ...
- QThread 爬坑之旅(三种办法解决QObject: Cannot create children for a parent that is in a different thread)
Cannot create children for a parent that is in a different thread. 在Qt的官方文档,大家知道有两种方式使用QThread. You ...
- LVDS原理及设计指南
LVDS是一种低摆幅的差分信号技术,它使得信号能在差分PCB 线对或平衡电缆上以 几百Mbps的速率传输,其低压幅和低电流驱动输出实现了低噪声和低功耗. IEEE 在两个标准中对LVDS ...
- TortoiseSvn介绍 客户端
转载自:http://www.cnblogs.com/lyhabc/articles/2482381.html TortoiseSvn 是 Subversion 版本控制系统的一个免费开源客户端,可以 ...
- css3 背景过度实现
代码: <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&q ...
- 解决MyEclipse中安装或升级ADT之后SDK Target无法显示的问题
故障现象,在MyEclipse里面安装完最新的android sdk和ADT之后,无法新建项目,Build Target为空,显示一直在loading.即如下面图里面显示的,Target Na ...
- NOIP 模拟赛
NOIP 模拟赛 思路:求 n , m 的 gcd,然后用 n , m 分别除以 gcd:若 n 或 m 为偶数,则输出 1/2. 特别的,当 n = m = 1 时,应输出 1/1 #include ...