Home > Backend Development > PHP Tutorial > PHP中的函数

PHP中的函数

WBOY
Release: 2016-06-23 13:27:31
Original
1242 people have browsed it

概述

函数名和 PHP 中的其它标识符命名规则相同。有效的函数名以字母或下划线打头,后面跟字母,数字或下划线

函数名是大小写无关的,不过在调用函数的时候,使用其在定义时相同的形式是个好习惯

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

函数的定义
<?phpfunction foo($arg_1, $arg_2, /* ..., */ $arg_n){    echo "Example function.\n";    return $retval;}?>
Copy after login

当一个函数是有条件被定义时,必须在调用函数之前定义

<?php $makefoo = true;/* 不能在此处调用foo()函数,   因为它还不存在,但可以调用bar()函数。*/bar();if ($makefoo) {  function foo()  {    echo "I don't exist until program execution reaches me.\n";  }}/* 现在可以安全调用函数 foo()了,   因为 $makefoo 值为真 */if ($makefoo) foo();function bar(){  echo "I exist immediately upon program start.\n";}?>
Copy after login

函数中的函数

<?phpfunction foo(){  function bar()  {    echo "I don't exist until foo() is called.\n";  }}/* 现在还不能调用bar()函数,因为它还不存在 */foo();/* 现在可以调用bar()函数了,因为foo()函数   的执行使得bar()函数变为已定义的函数 */bar();?>
Copy after login
函数的参数

值传递与引用传递

默认情况下,函数参数通过值传递(因而即使在函数内部改变参数的值,它并不会改变函数外部的值)。如果希望允许函数修改它的参数值,必须通过引用传递参数。

如果想要函数的一个参数总是通过引用传递,可以在函数定义中该参数的前面加上符号 &

<?phpfunction 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.'?>
Copy after login

默认参数

注意当使用默认参数时,任何默认参数必须放在任何非默认参数的右侧

默认值必须是常量表达式,不能是诸如变量,类成员,或者函数调用等

<?phpfunction makecoffee($type = "cappuccino"){    return "Making a cup of $type.\n";}echo makecoffee();echo makecoffee(null);echo makecoffee("espresso");?>
Copy after login

还允许使用数组 array 和特殊类型 NULL 作为默认参数

<?phpfunction makecoffee($types = array("cappuccino"), $coffeeMaker = NULL){    $device = is_null($coffeeMaker) ? "hands" : $coffeeMaker;    return "Making a cup of ".join(", ", $types)." with $device.\n";}echo makecoffee();echo makecoffee(array("cappuccino", "lavazza"), "teapot");?>
Copy after login

可变数量的参数

在 PHP 5.6 及以上的版本中,由 ... 语法实现可变数量的参数列表

<?phpfunction sum(...$numbers) {    $acc = 0;    foreach ($numbers as $n) {        $acc += $n;    }    return $acc;}echo sum(1, 2, 3, 4);?>
Copy after login

在PHP5.5及更早版本,可以用func_num_args(), func_get_arg()和 func_get_args()实现

func_num_args()返回参数的个数

<?phpfunction foo(){    $numargs = func_num_args();    echo "Number of arguments: $numargs\n";}foo(1, 2, 3);   ?>
Copy after login

func_get_args()返回一个包含函数参数列表的数组

<?phpfunction sum() {    $acc = 0;    foreach (func_get_args() as $n) {        $acc += $n;    }    return $acc;}echo sum(1, 2, 3, 4);?>
Copy after login

func_get_arg()返回参数列表的某一项,参数从0开始

<?phpfunction foo(){     $numargs = func_num_args();     echo "Number of arguments: $numargs<br />\n";     if ($numargs >= 2) {         echo "Second argument is: " . func_get_arg(1) . "<br>\n";     }}foo (1, 2, 3);?>
Copy after login
返回值

如果省略了 return,则返回值为 NULL

函数不能返回多个值,但可以通过返回一个数组来得到类似的效果

可变函数

这意味着如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它

<?phpfunction foo() {    echo "In foo()<br />\n";}function bar($arg = '') {    echo "In bar(); argument was '$arg'.<br>\n";}// 使用 echo 的包装函数function echoit($string){    echo $string;}$func = 'foo';$func();        // This calls foo()$func = 'bar';$func('test');  // This calls bar()$func = 'echoit';$func('test');  // This calls echoit()?>
Copy after login
匿名函数

匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。

<?phpecho preg_replace_callback('~-([a-z])~', function ($match) {    return strtoupper($match[1]);}, 'hello-world');// 输出 helloWorld?>
Copy after login

匿名函数赋给一个变量,最后也要加上分号:

<?php $greet = function($name){    printf("Hello %s\r\n", $name);};$greet('World');$greet('PHP');?>
Copy after login

闭包可以从父作用域中继承变量。 任何此类变量都应该用 use 语言结构传递进去

<?php $message = 'hello';// 没有 "use"$example = function () {    var_dump($message);};echo $example(); // NULL// 继承 $message$example = function () use ($message) {    var_dump($message);};echo $example(); // hello// Inherited variable's value is from when the function// is defined, not when called$message = 'world';echo $example(); // hello// Reset message$message = 'hello';// Inherit by-reference$example = function () use (&$message) {    var_dump($message);};echo $example(); // hello// The changed value in the parent scope// is reflected inside the function call$message = 'world';echo $example(); // world// Closures can also accept regular arguments$example = function ($arg) use ($message) {    var_dump($arg . ' ' . $message);};$example("hello"); // hello world?>
Copy after login

版权声明:本文为博主原创文章,未经博主允许不得转载。

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template