Bootstrap

【php基础入门】细说PHP中的函数声明与使用详解(重要)

一、PHP函数

在日常开发中,如果有一个功能或者一段代码要经常使用,则可以把它写成一个自定义函数,在需要的时候进行调用。

在程序中调用函数是为了简化编程的负担,减少代码量和提高开发效率,达到增加代码重用性、避免重复开发的目的。

我们先来看一个创建5行3列表格的案例

$table = "<table border='1' cellspacing='0' fontSize='32' bgColor='red'>";
for($i=0;$i<5;$i++){
   
    $table .="<tr>";
    for($j=0;$j<3;$j++){
   
        $table .= "<td>帅</td>";
    }
    $table .="</tr>";
}
$table .= "</table>";
echo $table;

那么,我们现在的需求变了,又需要创建3行2列绿色的表格了,这时候我们还要复制前面的代码,进行循环次数的修改,这样过于麻烦,并不能做到代码的复用性。所以我们可以把创建表格的代码封装成一个函数,我们调用时只要提供几行几列参数来生成即可。

自定义函数

function createTable(int $rows,int $cls,string $bgColor="red",string $content="帅"){
   
    $table = "<table border='1' cellspacing='0' fontSize='32' bgColor='{
     $bgColor}'>";
    for($i=0;$i<$rows;$i++){
   
        $table .="<tr>";
        for($j=0;$j<$cls;$j++){
   
            $table .= "<td>{
     $content}</td>";
        }
        $table .="</tr>";
    }
    return $table .= "</table>";
}
echo createTable(3,2,'green');

系统函数(内置的提前定义好的,直接调用即可)

// 绝对值函数
echo abs(-3.1415926); // 3.1415926
// 字符串长度
echo strlen('nihao'); // 5
echo strlen('你好'); // 6个字符
// 小写转大写
echo strtoupper('hello world'); // HELLO WORLD
// 生成随机数
echo mt_rand(0,100);
// 数组长度
echo count([1,2,3,4]); // 4

1. PHP定义函数

命名函数

在 PHP 中声明一个自定义的命名函数可以使用下面的语法格式:

function 函数名称(类型限定 参数列表): 返回值类型
{
   
    // 函数体 
    return 返回值;
    // 没有return 则返回null
}

定义一个函数,来实现简单的加法运算

<?php
    // 提示:只要声明的函数在脚本中可见,就可以通过函数名在脚本的任意位置进行调用,在 PHP 中可以在函数的声明之后调用,也可以在函数的声明之前调用,还可以在函数中调用函数。
    $sum = add(6,8);
    echo '$sum = '.$sum.'<br>';

	// 自动提升到脚本的顶部,在全局的任何地方都可以调用到函数
    function add(float $num1, float $num2):float
	{
   
        $a = $num1 + $num2;
        return $a;
    }
	// 不管是自定义的函数还是系统函数,如果函数不被调用,就不会执行。只要在需要使用函数的位置,使用函数名称和参数列表进行调用即可。
    $sum = add(11,5);
    echo '$sum = '.$sum.'<br>';
?>
匿名函数

匿名函数的声明一般是将整个函数赋值给一个变量,通过变量可以调用该函数。变量本身就是函数本身,调用 变量名(参数)即可。匿名函数没有声明提升,和变量一样必须先声明在访问。

$fn = function(){
   
    // 函数体
    return 返回值;
}; // 匿名函数要以分号结尾

我们来定义一个匿名函数

$str = function(){
   
    return "hello world!";
}
echo $str();
// 自调用的匿名函数
(function(){
   
    echo 'run……';
})();

2. PHP函数参数传递

如果函数没有参数列表,函数执行的任务就是固定的,用户在调用函数时不能改变函数内部的一些执行行为。

如果函数有参数列表,函数就可以从外部获取函数执行所需要的数据值。也就是用户在调用函数时,在函数体还没有执行之前,将一些数据通过函数的参数列表传递到函数内部,这样函数在执行函数体时,就可以根据用户传递过来的数据决定函数体内部如何执行。

根据参数使用的位置,参数分为形式参数和实际参数两种。


形式参数(形参)

形式参数就是定义函数时函数名后面括号内的参数列表(简称“形参”),就像它的名字一样,形参本身没有具体的值。因为函数体中需要使用外部传入的参数,为了使参数可以正确地传递进来,就需要通过形式参数与函数体里面的数据进行传递,形式参数如下图所示。


实际参数(实参)

实际参数就是我们在调用函数时函数名后面括号中的若干个参数(简称“实参”),实参和形参需要按顺序一一对应,它会替换形式参数在函数体中对应的变量值,函数的参数可以是一个具体的值,也可以是一个变量,实际参数如下图所示。

在调用函数时,需要向函数传递参数,被传入函数的参数称为实参,而函数定义的参数称为形参。而向函数传递参数的方式有四种,分别是值传递、引用传递、可选参数(默认值参数)和可变长度参数。

值传递
<?php
    // 值传递是 PHP 中函数的默认传值方式,也称为“拷贝传值”。
    function swap($a, $b){
   
        echo '函数内,交换前 $a = '.$a.', $b = '.$b.'<br>';
        $temp = $a;
        $a = $b;
        $b = $temp;
        echo '函数内,交换后 $a = '.$a.', $b = '.$b.'<br>';
    }
    $x = 5;
    $y = 7;
    echo '函数外,交换前 $x = '.$x.', $y = '.$y.'<br>';
    swap($x, $y);
    echo '函数外,交换后 $x = '.$x.', $y = '.$y;
/*
函数外,交换前 $x = 5, $y = 7
函数内,交换前 $a = 5, $b = 7
函数内,交换后 $a = 7, $b = 5
函数外,交换后 $x = 5, $y = 7
*/
// 函数外部,数值却没有变化
?>
引用参数
<?php
// 引用传递的方式就是在值传递的基础上加上一个&符号
    function swap(&$a, &$b){
   
        echo '函数内,交换前 $a = '.$a.', $b = '.$b.'<br>';
        $temp = $a;
        $a = $b;
        $b = $temp;
        echo '函数内,交换后 $a = '.$a.', $b = '.$b.'<br>';
    }
    $x = 5;
    $y = 7;
    echo '函数外,交换前 $x = '.$x.', $y = '.$y.'<br>';
    swap($x, $y);
    echo '函数外,交换后 $x = '.$x.', $y = '.$y
;