PHP 之函数
一、函数定义
function foo ( $arg_1 , $arg_2 , /* ..., */ $arg_n )
{
echo "Example function.\n" ;
return $retval ;
}
二、函数参数
通过参数列表可以传递信息到函数,即以逗号作为分隔符的表达式列表。参数是从左向右求值的。
PHP 支持按值传递参数(默认),通过引用传递参数以及默认参数。也支持可变长度参数列表。
1、引用传递
function add_some_extra (& $string )
{
$string .= 'and something extra.' ;
}
$str = 'This is a string, ' ;
add_some_extra ( $str );
echo $str ; // outputs 'This is a string, and something extra.'
2、默认传递
function takes_array ( $input )
{
echo " $input [ 0 ] + $input [ 1 ] = " , $input [ 0 ]+ $input [ 1 ];
}
3、可变长度参数
function sum (... $numbers ) {
$acc = 0 ;
foreach ( $numbers as $n ) {
$acc += $n ;
}
return $acc ;
}
echo sum ( 1 , 2 , 3 , 4 );
三、返回值
值通过使用可选的返回语句返回。可以返回包括数组和对象的任意类型。返回语句会立即中止函数的运行,并且将控制权交回调用该函数的代码行。
function square ( $num )
{
return $num * $num ;
}
echo square ( 4 ); // outputs '16'.
四、可变函数
PHP 支持可变函数的概念。这意味着如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它。可变函数可以用来实现包括回调函数,函数表在内的一些用途。
可变函数不能用于例如 echo , print , unset() , isset() , empty() , include , require 以及类似的语言结构。需要使用自己的包装函数来将这些结构用作可变函数。
class Foo
{
function Variable ()
{
$name = 'Bar' ;
$this -> $name (); // This calls the Bar() method
}
function Bar ()
{
echo "This is Bar" ;
}
}
$foo = new Foo ();
$funcname = "Variable" ;
$foo -> $funcname (); // This calls $foo->Variable()
五、内置函数
PHP 有很多标准的函数和结构。还有一些函数需要和特定地 PHP 扩展模块一起编译,否则在使用它们的时候就会得到一个致命的“未定义函数”错误。例如,要使用 image 函数中的 imagecreatetruecolor() ,需要在编译 PHP 的时候加上 GD 的支持。或者,要使用 mysql_connect() 函数,就需要在编译 PHP 的时候加上 MySQL 支持。有很多核心函数已包含在每个版本的 PHP 中如字符串和变量函数。调用 phpinfo() 或者 get_loaded_extensions() 可以得知 PHP 加载了那些扩展库。
六、匿名函数
匿名函数,也叫闭包函数,允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。当然,也有其它应用的情况。
$message = 'hello' ;
// 没有 "use"
$example = function () {
var_dump ( $message );
};
echo $example ();
// 继承 $message
$example = function () use ( $message ) {
var_dump ( $message );
};
echo $example ();
// Inherited variable's value is from when the function
// is defined, not when called
$message = 'world' ;
echo $example ();
// Reset message
$message = 'hello' ;
// Inherit by-reference
$example = function () use (& $message ) {
var_dump ( $message );
};
echo $example ();
// The changed value in the parent scope
// is reflected inside the function call
$message = 'world' ;
echo $example ();
// Closures can also accept regular arguments
$example = function ( $arg ) use ( $message ) {
var_dump ( $arg . ' ' . $message );
};
$example ( "hello" );
Notice: Undefined variable: message in /example.php on line 6 NULL string(5) "hello" string(5) "hello" string(5) "hello" string(5) "world" string(11) "hello world"

浙公网安备 33010602011771号