目录
一、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