func_get_arg( int $arg_num ):從用戶自定義函數的參數列表中獲取某個指定的參數
func_get_args( void ):獲取函數參數列表的數組。返回一個數組,其中每個元素都是目前用戶自定義函數的參數列表的相應元素的副本。
func_num_args( void ) 獲取傳遞給函數的參數的數目。
1、func_get_arg
(PHP 4, PHP 5)
mixed func_get_arg ( int $arg_num )
從用戶自定義函數的參數列表中獲取某個指定的參數
arg_num:參數的偏移量。函數的參數是從0開始計數的。
返回值:返回指定的參數,錯誤則返回FALSE。
錯誤/異常:當在自定義函數的外面調用的該函數的時候會發出一個警告,或者是當 arg_num比實際傳入的參數的數目大的時候也會發出一個警告。
Example #2func_get_arg() PHP 5.3 前後對比的例子
test.php
<?php
function foo() {
include'./fga.inc';
}
foo('First arg', 'Second arg');
?>
fga.inc
<?php
$arg = func_get_arg(1);
var_export($arg);
?>
PHP 5.3 版本之前的輸出:'Secondarg'。
PHP 5.3 和之後的版本的輸出:Warning:func_get_arg(): Called from the global scope - no function
context in /home/torben/Desktop/code/ml/fga.inc online 3 false
Example #3func_get_arg() example of byref and byvalarguments
<?php
function byVal($arg){
echo 'Aspassed :',var_export(func_get_arg(0)), PHP_EOL;
$arg ='baz';
echo'After change :',var_export(func_get_arg(0)), PHP_EOL;
}
function byRef(&$arg){
echo 'Aspassed :',var_export(func_get_arg(0)), PHP_EOL;
$arg ='baz';
echo 'After change : ',var_export(func_get_arg(0)), PHP_EOL;
}
$arg = 'bar';
byVal($arg);
byRef($arg);
?>
以上例程會輸出:
As passed : 'bar'
After change : 'bar'
As passed : 'bar'
Afterchange : 'baz'
註釋
Note:
因爲函數依賴於當前作用域以確定參數的細節,所以在 5.3.0以前的版本中不能用作函數的參數。如必須傳遞此值時,可將結果賦與一個變量,然後用此變量進行傳遞。
Note:
如果參數以引用方式傳遞,函數對該參數的任何改變將在函數返回後保留。
Note:This function returns a copy of the passedarguments only, and does not accountfor default (non-passed) arguments.
2、func_get_args()
func_get_args(PHP4, PHP 5)
func_get_args — 返回一個包含函數參數列表的數組
說明
array func_get_args ( void )
獲取函數參數列表的數組。
該函數可以配合func_get_arg() 和func_num_args() 一起使用,從而使得用戶自定義函數可以接受自定義個數的參數列表。
返回值:返回一個數組,其中每個元素都是目前用戶自定義函數的參數列表的相應元素的副本。
錯誤/異常:在用戶自定義函數外調用則會出現錯誤警告。
範例
Example#1func_get_args() 例子
<?php
function foo()
{
$numargs = func_num_args();
echo "Number of arguments:$numargs<br/>\n";
if ($numargs >= 2) {
echo "Secondargument is: " .func_get_arg(1) . "<br />\n";
}
$arg_list = func_get_args();
for ($i = 0; $i < $numargs; $i++) {
echo "Argument $iis: " .$arg_list[$i] . "<br />\n";
}
}
foo(1, 2, 3);
?>
以上例程會輸出:
Number ofarguments: 3<br />
Second argumentis: 2<br />
Argument 0 is:1<br />
Argument 1 is:2<br />
Argument 2 is:3<br />
Example #2PHP 5.3前後使用 func_get_args() 在的對比
test.php
<?php
function foo() {
include './fga.inc';
}
foo('First arg','Second arg');
?>
fga.inc
<?php
$args =func_get_args();
var_export($args);
?>
PHP 5.3 版本之前的輸出:
array (
0 => 'First arg',
1 => 'Second arg',
)
PHP 5.3 和之後的版本的輸出:
Warning:func_get_args(): Called from the globalscope - nofunction context in /home/torben/Desktop/code/ml/fga.inc on line 3false
Example #3func_get_args() example of byref and byval arguments
<?php
functionbyVal($arg) {
echo 'As passed : ',var_export(func_get_args()), PHP_EOL;
$arg = 'baz';
echo 'After change : ',var_export(func_get_args()), PHP_EOL;
}
functionbyRef(&$arg) {
echo 'As passed : ',var_export(func_get_args()), PHP_EOL;
$arg = 'baz';
echo 'After change : ',var_export(func_get_args()), PHP_EOL;
}
$arg = 'bar';
byVal($arg);
byRef($arg);
?>
以上例程會輸出:
As passed : array(
0 => 'bar',
)
After change :array (
0 => 'bar',
)
As passed : array(
0 => 'bar',
)
After change :array (
0 => 'baz',
)
註釋
Note:
因爲函數依賴於當前作用域以確定參數的細節,所以在 5.3.0以前的版本中不能用作函數的參數。如必須傳遞此值時,可將結果賦與一個變量,然後用此變量進行傳遞。
Note:
如果參數以引用方式傳遞,函數對該參數的任何改變將在函數返回後保留。
Note:該函數僅僅是返回傳遞參數的一個副本,並且不包含沒有傳入的默認參數。
3、func_num_args
intfunc_num_args ( void ) 獲取傳遞給函數的參數的數目。 (PHP 4, PHP 5)
錯誤/異常:如果在用戶定義函數的外部調用時產生一個警告。
範例
Example #1func_num_args() example
<?php
function foo()
{
$numargs = func_num_args();
echo "Number of arguments:$numargs\n";
}
foo(1, 2, 3);
?>
以上例程會輸出:
Number of arguments: 3
Example #2func_num_args() example beforeand after PHP 5.3
test.php
<?php
function foo() {
include './fna.php';
}
foo('First arg', 'Second arg');
?>
fna.php
<?php
$num_args = func_num_args();
var_export($num_args);
?>
Output previous to PHP 5.3:
2
Output in PHP 5.3 and later will besomething similar to:
Warning: func_num_args(): Called from the global scope - nofunction
context in/home/torben/Desktop/code/ml/fna.php on line 3
-1
註釋
Note:
因爲函數依賴於當前作用域以確定參數的細節,所以在 5.3.0以前的版本中不能用作函數的參數。如必須傳遞此值時,可將結果賦與一個變量,然後用此變量進行傳遞。