PHP: func_num_args - Manual

downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

function_exists func_get_args

Last updated: Sat, 27 Jan 2007

view this page in

# func_num_args

(PHP 4, PHP 5)

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

## Описание

int func_num_args ( void )

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

`<?php
function foo()
{
$numargs = func_num_args();
echo "Number of arguments: $numargs\n";
}
foo(1, 2, 3); // Prints 'Number of arguments: 3'
?>`

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

add a note User Contributed Notes
func_num_args
padron at aaargh dot com dot br
19-Jan-2007 11:18
`func_num_args(), func_get_args() and func_get_arg() can be very useful to emulate overloading in PHP.
Suppose you have a class to add a user in a system, and that you want to allow 2 ways of doing it. The first way would be passing an array with all the user info in it, and the second way would be passing each user attribute as a single argument.
<?php
class Test {
function insertUser() {
// gets the number of parameters
$numArgs = func_num_args();
// make decisions based on the arguments number
if ($numArgs == 1) {
// if it's only one argument, we suppose that it is an array with user info
// gets the first argument
$user = func_get_arg(0);
// checks if it really is an array
if (is_array($user)) {
// here you should check if the array contains all necessary fields
// adds the user
echo "User added.<br/>";
echo "ID: " . $user["id"] . "<br/>";
echo "NAME: " . $user["name"] . "<br/>";
echo "EMAIL: " . $user["email"] . "<br/>";
} else {
// generates an error if argument is not an array
echo "Argument is not an array: " . $user . ".<br/>";
}
} else if ($numArgs == 3) {
// if the function receives 3 arguments, we assume that they
// are 'id', 'name' and 'email' respectively
// inserts the user into the system
echo "User added.<br/>";
echo "ID: " . func_get_arg(0) . "<br/>";
echo "NAME: " . func_get_arg(1) . "<br/>";
echo "EMAIL: " . func_get_arg(2) . "<br/>";
} else {
// if the number of arguments is different from 1 and 3
// an error will be generated
echo "Wrong argument number.<br/>";
echo "Arguments received: " . func_num_args();
}
}
}
// creates an Test object
$objTest = new Teste();
// inserts an user passing an array with all his info
$objTest->insertUser(array("id" => 1, "name" => "George W. Bush", "email" => "jackass@whitehouse.gov"));
echo "<br/>";
// inserts an user providing each attribute as a single argument
$objTest->insertUser(2, "Vicente Fox", "iloveusa@disney.com");
echo "<br/>";
// this will generate an error, because only 2 arguments were passed
$objTest->insertUser(3, "Tony Blair");
?>`
neelam_ab2003 at yahoo dot co dot in
11-May-2006 12:40
`Just adding a note to JARED's Note.
func_num_args() works if and only if called from within a function definition BECAUSE it calculates the number of arguments sent while function calling. That is why it gives
'1' in helloWorld("HelloWorld!") and '2' in helloWorld("HelloWorld!", "HowdyWorld!") - There is nothing to do with DEFAULT args.
If you call the same function as helloWorld(); "No args passed"
It will give a warning for wrong function call ("Warning: Missing argument 1 for helloWorld()") and the result of func_num_args() will be '0'.`
friz at godshell dot com
16-Mar-2006 11:24
`This function comes in extremely handy in OO Classes. My focus is currently PHP 4, but this technique probably works just as well in PHP 5.
Class foo {
// constructor, other methods, etc
function somedata($somedata = '') {
if (func_num_args() > 0) {
$this->somedata = $somedata;
}
return $this->somedata;
}
}
This allows for a default value to be set, while not requiring the parameter. (Yes, I'm aware that it only warns when you do, but I think this is a little cleaner)`
jared at ws-db dot com
06-Sep-2005 09:46
`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:
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!");`
andy at arakka dot co dot th
11-May-2005 07:16
`func_num_args() can be used in conjunction with named arguments, also. For example:
function DebugShow( $label, $value ) {
echo "# " . $label ;
if ( func_num_args() > 1 ) echo " = " . $value ;
echo "<br>";
}`
ashley at dcs dot warwick dot ac dot uk
17-Apr-2002 04:40
`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:
/* 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);`
thalis at NOSPAMcs dot pitt dot edu
29-Mar-2002 12:05
`The idea of func_get_args() is to construct functions of variable number of parameters like
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()
}
}`
add a note
function_exists func_get_args

Last updated: Sat, 27 Jan 2007
show source | credits | stats | sitemap | contact | advertising | mirror sites
Copyright © 2001-2007 The PHP Group
All rights reserved.
This mirror generously provided by: Yahoo! Inc.
Last updated: Sat Mar 10 09:32:46 2007 PST