一、用户自定义函数
函数名和 PHP 中的其它标识符命名规则相同。有效的函数名以字母或下划线打头,后面跟字母,数字或下划线。
函数名是大小写无关的,不过在调用函数的时候,使用其在定义时相同的形式是个好习惯。
一个函数可由以下的语法来定义:
- <?php
- function foo ()
- {
- function bar ()
- {
- echo "I don't exist until foo() is called." ;
- }
- }
- /* 现在还不能调用bar()函数,因为它还不存在 */
- foo ();
- /* 现在可以调用bar()函数了,因为foo()函数
- 的执行使得bar()函数变为已定义的函数 */
- bar ();
二、函数的参数
通过参数列表可以传递信息到函数,即以逗号作为分隔符的表达式列表。参数是从左向右求值的。
PHP 支持按值传递参数(默认),通过引用传递参数以及默认参数。也支持可变长度参数列表。
- <?php
- function takes_array ( $input )
- {
- echo ' $input [ 0 ] + $input [ 1 ] = ' , $input [ 0 ]+ $input [ 1 ];
- }
- $input=['1','3','5','7','9'];
- takes_array($input);//$input [ 0 ] + $input [ 1 ] = 4
通过引用传递参数
默认情况下,函数参数通过值传递(因而即使在函数内部改变参数的值,它并不会改变函数外部的值)。如果希望允许函数修改它的参数值,必须通过引用传递参数。
如果想要函数的一个参数总是通过引用传递,可以在函数定义中该参数的前面加上符号 &:
- <?php
- function add_some_extra (& $string )
- {
- $string .= '付杰博客' ;
- }
- $str = 'This is a string, ' ;
- add_some_extra ( $str );
- echo $str ; // 'This is a string, 付杰博客.'
默认参数的值
函数可以定义 C++ 风格的标量参数默认值,如下所示:
- <?php
- function makecoffee ( $blog= '付杰博客' ,$url='www.fujieace.com')
- {
- return "blogname=$blog,blogurl=$url" ;
- }
- echo makecoffee();//blogname=付杰博客,blogurl=www.fujieace.com
三、返回值
值通过使用可选的返回语句返回。可以返回包括数组和对象的任意类型。返回语句会立即中止函数的运行,并且将控制权交回调用该函数的代码行。
Note:
如果省略了 return ,则返回值为 NULL 。
函数不能返回多个值,但可以通过返回一个数组来得到类似的效果。
- <?php
- function square ( $num )
- {
- return $num * $num ;
- }
- echo square ( 4 ); // 16.
四、可变函数
PHP 支持可变函数的概念。这意味着如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它。可变函数可以用来实现包括回调函数,函数表在内的一些用途。
可变函数不能用于例如 echo , print , unset() , isset() , empty() , include , require 以及类似的语言结构。需要使用自己的包装函数来将这些结构用作可变函数。
- <?php
- function foo () {
- echo "In foo()" ;
- }
- function bar ( $arg = '' ) {
- echo "In bar(); argument was $arg " ;
- }
- // 使用 echo 的包装函数
- function echoit ( $string )
- {
- echo $string ;
- }
- $func = 'foo' ;
- $func (); // In foo()
- $func = 'bar' ;
- $func ( 'test' ); // In bar(); argument was test
- $func = 'echoit' ;
- $func ( 'test' ); // test
五、内部(内置)函数
PHP 有很多标准的函数和结构。还有一些函数需要和特定地 PHP 扩展模块一起编译,否则在使用它们的时候就会得到一个致命的“未定义函数”错误。
例如,要使用 image 函数中的 imagecreatetruecolor() ,需要在编译 PHP 的时候加上 GD 的支持。或者,要使用 mysql_connect() 函数,就需要在编译 PHP 的时候加上 MySQL 支持。有很多核心函数已包含在每个版本的 PHP 中如字符串和变量函数。调用 phpinfo() 或者 get_loaded_extensions() 可以得知 PHP 加载了那些扩展库。同时还应该注意,很多扩展库默认就是有效的。
PHP 手册按照不同的扩展库组织了它们的文档。请参阅配置,安装以及各自的扩展库章节以获取有关如何设置 PHP 的信息。
六、匿名函数
匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。
- <?php
- echo preg_replace_callback ( '~-([a-z])~' , function ( $match ) {
- return strtoupper ( $match [ 1 ]);
- }, 'hello-world' );
- // 输出 helloWorl