func_num_args

(PHP 4, PHP 5, PHP 7, PHP 8)

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

Описание

func_num_args(): int

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

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

Список параметров

У этой функции нет параметров.

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

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

Ошибки

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

Примеры

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

<?php

function foo()
{
echo
"Количество аргументов: ", func_num_args(), PHP_EOL;
}

foo(1, 2, 3);
?>

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

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

Примечания

Замечание:

Начиная с PHP 8.0.0 семейство функций func_*() стремится к большей прозрачности в отношении именованных аргументов, поскольку обрабатывают аргументы так, как если бы каждый из них передали позиционно, а аргументы, которые пропустили, заменяют значениями по умолчанию. Функция игнорирует коллекцию неизвестных именованных аргументов переменной длины. Доступ к собранным неизвестным именованным аргументам получают только через параметр с переменным количеством аргументов.

Смотрите также

Добавить

Примечания пользователей 6 notes

up
41
jared at ws-db dot com
19 years ago
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!");
?>
up
10
Dennis Robinson from basnetworks dot net
16 years ago
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 nullfunction 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 nullfunction 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.
up
4
luisguillermo dot quevedovelez at gmail dot com
13 years ago
I had defined a function function_name(){ ...} as a drupal callback.I try to get how many params where passedI got a Error and my Site falls downI'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.
up
1
thalis at NOSPAMcs dot pitt dot edu
23 years ago
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()
    }
}
?>
up
1
ashley at dcs dot warwick dot ac dot uk
23 years ago
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+1 < $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);
?>
up
0
tongcheong77 at gmail dot com
8 years ago
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
To Top