func_num_args

(PHP 4, PHP 5, PHP 7)

func_num_argsВозвращает количество аргументов, переданных функции

Описание

int func_num_args ( void )

Возвращает количество аргументов, переданных функции.

Эта функция также может быть использована совместно с func_get_arg() и func_get_args() для создания функций с переменным количеством аргументов.

Возвращаемые значения

Возвращает количество аргументов, переданных текущей пользовательской функции.

Список изменений

Версия Описание
5.3.0 Эта функция теперь может быть использована в качестве параметра функции.
5.3.0 Если эта функция вызвана в глобальной области видимости файла, подключенного с помощью include или require из функции вызывающего файла, то теперь будет сгенерировано предупреждение и возвращено значение -1.

Ошибки

Генерирует предупреждение при вызове вне определения функции.

Примеры

Пример #1 Пример использования func_num_args()

<?php
function foo()
{
    
$numargs func_num_args();
    echo 
"Количество аргументов: $numargs\n";
}

foo(123);
?>

Результат выполнения данного примера:

Количество аргументов: 3

Пример #2 Использование func_num_args() до и после PHP 5.3

test.php
<?php
function foo() {
    include 
'./fna.php';
}

foo('Первый аргумент''Второй аргумент');
?>

fna.php
<?php

$num_args 
func_num_args();
var_export($num_args);

?>

Вывод до PHP 5.3:

2

Вывод в PHP 5.3 и выше будет содержать что-то типа следующего:

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

Примечания

Замечание:

Так как для определения параметров данной функции необходим контекст выполнения, она не может быть передана в качестве параметра в версиях PHP до 5.3.0. Если функцию все же необходимо передать, то нужно присвоить ее переменной, которую уже можно использовать при передаче.

Коментарии

The idea of func_get_args() is to construct functions of variable number of parameters like

<?php
function var_param_func(){
    if(
func_num_args()==0){
       
//do one thing
   
}
    if(
func_num_args()==1)
       
//do another thing
        //get the args with func_get_args()
   
}
}
?>
2002-03-29 14:05:31
http://php5.kiev.ua/manual/ru/function.func-num-args.html
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:

<?php
/* Print an HTML tag.  This accepts a variable number of arguments:
   the first should be the name of the tag, followed by pairs of
   arguments that describe keys and values.  The values are printed
   with surrounding double quote characters.  */
function printTag() {
 
$numArgs func_num_args();
  if (
$numArgs 1) die("printTag given no arguments");
 
  echo 
"<" func_get_arg(0);
  for (
$i 1$i $numArgs$i+=2) {
    echo 
" " func_get_arg($i);
    if (
$i+$numArgs)
      echo 
"=\"" func_get_arg($i+1) . "\"";
  }
  echo 
">";
 
}

/* Print an HTML tag with a newline on the end */
function printTagNL() {
 
$args func_get_args();
 
call_user_func_array("printTag"$args);
  echo 
"\n";
}

printTagNL("input""type""hidden""name""SORTORDER""value"$columnNo);
?>
2002-04-17 07:40:26
http://php5.kiev.ua/manual/ru/function.func-num-args.html
func_num_args() can be used in conjunction with named arguments, also. For example:

<?php
function DebugShow$label$value ) {
  echo 
"# " $label ;
  if ( 
func_num_args() > ) echo " = " $value ;
  echo 
"<br>";
}
?>
2005-05-11 22:16:50
http://php5.kiev.ua/manual/ru/function.func-num-args.html
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:

<?php
function helloWorld($ArgA$ArgB="HelloWorld!") {
  return 
func_num_args();
}

// The following will return 1
$Returns1 helloWorld("HelloWorld!");

// The following will return 2
$Returns2 helloWorld("HelloWorld!""HowdyWorld!");
?>
2005-09-06 12:46:41
http://php5.kiev.ua/manual/ru/function.func-num-args.html
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:

<?php

// $data can be of any type, including null
function my_function($name$data null)
{
    if (
$data !== null)
    {
       
// Do something with $data
        // If you call my_function('something'), this WILL NOT be reached
        // If you call my_function('something', null), this WILL NOT be reached
   
}
}

?>

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:

<?php

// $data can be of any type, including null
function my_function($name$data null)
{
    if (
func_num_args() >= 2)
    {
       
// Do something with $data
        // If you call my_function('something'), this WILL NOT be reached
        // If you call my_function('something', null), this WILL be reached
   
}
}

?>

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.
2009-06-30 00:29:25
http://php5.kiev.ua/manual/ru/function.func-num-args.html
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.
2012-03-13 09:32:48
http://php5.kiev.ua/manual/ru/function.func-num-args.html
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 '<pre>';
      var_dump($args_list);
      echo '<pre>';
  }
}

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
2017-06-20 21:12:48
http://php5.kiev.ua/manual/ru/function.func-num-args.html

    Поддержать сайт на родительском проекте КГБ