PHP 不支持函数重载,也不可能取消定义或者重定义已声明的函数。

      PHP 支持按值传递参数(默认),通过引用传递参数以及默认参数。也支持可变长度参数列表。 


通过引用传递参数
      默认情况下,函数参数通过值传递(因而即使在函数内部改变参数的值,它并不会改变函数外部的值)。如果希望允许函数修改它的参数值,必须通过引用传递参数。 如果想要函数的一个参数总是通过引用传递,可以在函数定义中该参数的前面加上符号 &


默认参数的值

默认值必须是常量表达式,不能是诸如变量,类成员,或者函数调用等。 注意当使用默认参数时,任何默认参数必须放在任何非默认参数的右侧;否则,函数将不会按照预期的情况工作。


可变数量的参数列表
      PHP 在用户自定义函数中支持可变数量的参数列表。在 PHP 5.6 及以上的版本中,由 ... 语法实现;在 PHP 5.5 及更早版本中,使用函数 func_num_args(),func_get_arg(),和 func_get_args() 。 


返回值 
      值通过使用可选的返回语句返回。可以返回包括数组和对象的任意类型。返回语句会立即中止函数的运行,并且将控制权交回调用该函数的代码行。如果省略了 return,则返回值为 NULL。


可变函数
      PHP 支持可变函数的概念。这意味着如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它。可变函数可以用来实现包括回调函数,函数表在内的一些用途。可变函数不能用于例如 echo,print,unset(),isset(),empty(),include,require 以及类似的语言结构。需要使用自己的包装函数来将这些结构用作可变函数。


内置函数

phpinfo() 或者 get_loaded_extensions() 可以得知 PHP 加载了那些扩展库。同时还应该注意,很多扩展库默认就是有效的。例如,str_replace() 函数将返回修改过的字符串,而 usort() 却直接作用于传递的参数变量本身。

<?php
// 通过引用传递参数
function add_some_str(& $str)
{
$str .= "add_some_str"."<br>";
}
$str = "test1";
add_some_str($str);
echo $str;

// 默认参数的值
function add_some_str1($str = "add_some_str1")
{
return "test2.$str"."<br>";
}
echo add_some_str1();
echo add_some_str1("default");

/*function sum(...$numbers)
{
$acc = 0;
foreach ($numbers as $n)
{
$acc += $n;
}
return $acc;
}
echo sum(1, 2, 3, 4);*/

// 返回引用值
function &rGetRef($str)
{
return($str);
}
$str2 = &rGetRef("123");

// 可变函数,用于回调函数
function foo() {
echo "In foo()"."<br>";
}

function bar($arg = '') {
echo "In bar(); argument was '$arg'"."<br>";
}
$func = 'foo';
$func(); // This calls foo()
$func = 'bar';
$func('test'); // This calls bar()
?>

PHP 函数_php