码迷,mamicode.com
首页 > Web开发 > 详细

PHP中的函数

时间:2015-08-29 18:52:52      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:php   函数   

概述

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

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

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


函数的定义

<?php
function foo($arg_1, $arg_2, /* ..., */ $arg_n)
{
    echo "Example function.\n";
    return $retval;
}
?>

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

<?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";
}

?>

函数中的函数

<?php
function foo()
{
  function bar()
  {
    echo "I don‘t exist until foo() is called.\n";
  }
}

/* 现在还不能调用bar()函数,因为它还不存在 */

foo();

/* 现在可以调用bar()函数了,因为foo()函数
   的执行使得bar()函数变为已定义的函数 */

bar();

?>

函数的参数

值传递与引用传递

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

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

<?php
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.‘
?>

默认参数

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

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

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

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

<?php
function 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");
?>

可变数量的参数

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

<?php
function sum(...$numbers) {
    $acc = 0;
    foreach ($numbers as $n) {
        $acc += $n;
    }
    return $acc;
}

echo sum(1, 2, 3, 4);
?>

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

func_num_args()返回参数的个数

<?php
function foo()
{
    $numargs = func_num_args();
    echo "Number of arguments: $numargs\n";
}

foo(1, 2, 3);   
?>

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

<?php
function sum() {
    $acc = 0;
    foreach (func_get_args() as $n) {
        $acc += $n;
    }
    return $acc;
}

echo sum(1, 2, 3, 4);
?>

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

<?php
function 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);
?>

返回值

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

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


可变函数

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

<?php
function 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()
?>

匿名函数

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

<?php
echo preg_replace_callback(‘~-([a-z])~‘, function ($match) {
    return strtoupper($match[1]);
}, ‘hello-world‘);
// 输出 helloWorld
?>

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

<?php
$greet = function($name)
{
    printf("Hello %s\r\n", $name);
};

$greet(‘World‘);
$greet(‘PHP‘);
?>

闭包可以从父作用域中继承变量。 任何此类变量都应该用 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
?>

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

PHP中的函数

标签:php   函数   

原文地址:http://blog.csdn.net/wozaixiaoximen/article/details/48088183

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!