百科狗-知识改变命运!
--

func_num_args() - php 选项信息函数

梵高1年前 (2023-11-21)阅读数 43#技术干货
文章标签参数

func_num_args()

(PHP 4, PHP 5, PHP 7)

Returns the number of arguments passed to the function

说明

func_num_args(void): int

Gets the number of arguments passed to the function.

This function may be used in conjunction withfunc_get_arg()andfunc_get_args()to allow user-defined functions to accept variable-length argument lists.

返回值

Returns the number of arguments passed into the current user-defined function.

更新日志

版本说明
5.3.0This function can now be used in parameter lists.
5.3.0If this function is called from the outermost scope of a file which has been included by callingincludeorrequirefrom within a function in the calling file, it now generates a warning and returns -1.

错误/异常

Generates a warning if called from outside of a user-defined function.

范例

func_num_args() - php 选项信息函数

Example #1func_num_args()example

以上例程会输出:

Number of arguments: 3

Example #2func_num_args()example before and after PHP 5.3

test.php

fna.php 

Output previous to PHP 5.3:

2

Output in PHP 5.3 and later will be something similar to:

Warning: func_num_args():  Called from the global scope - no function
context in /home/torben/Desktop/code/ml/fna.php on line 3
-1

注释

Note:

因为函数依赖于当前作用域以确定参数的细节,所以在5.3.0 以前的版本中不能用作函数的参数。如必须传递此值时,可将结果赋与一个变量,然后用此变量进行传递。

参见

  • func_get_arg() 返回参数列表的某一项
  • func_get_args() 返回一个包含函数参数列表的数组
  • ReflectionFunctionAbstract::getNumberOfParameters() 获取参数数目
Just a note for anyone wondering. This function doesn't include params that have a default value, unless you pass one in to overwrite the default param value. Not sure if that makes sense, so here's an example: 
This function comes in handy, and I believe is the only solution, when you have an optional parameter that can take any type of data.
For example:

The problem with the above function is that you will never be able to use null as the value for $data. To fix this, use func_num_args() like so:

This solution works because func_num_args() reports exactly how many arguments were passed when the function was called. It does not take into account when default argument values are used.
The idea of func_get_args() is to construct functions of variable number of parameters like 
I had defined a function function_name(){ ...} as a drupal callback.
I try to get how many params where passed
I got a Error and my Site falls down
I've replaced func_get_args() instead func_num_args() and my Site was restored.
I conclude you can not use func_num_args() in callbacks.
Hope it helps.
If you are using PHP 7 and func_num_args is in your base class which you extended, you can pass your arguments with the 'spat' operator.
class Sql {
public function doGetWhere(...$args) {
$num_args = func_num_args();
   $args_list = func_get_args();
   echo '
';
   var_dump($args_list);
   echo '
';
 }
}
class Member extends Sql {
public function getWhere(...$args) {
  $this->doGetWhere(...$args);
   }
}
$member = new Member();
$member->getWhere('first_name','last_name','userlevel','email','where','email','=',$sub_email);
However, take note that if you 'new up' the 'Sql' class in your 'Member' class above, instead of extending it, you will not need to pass your arguments as a variable. Just my two cents. -Bruce tong
If you want to pass the parameters on intact to another function, use func_get_args and call_user_func_array (careful - this one is only available in recent PHP versions). For example: 
func_num_args() can be used in conjunction with named arguments, also. For example: 

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)