PHP--函数

2023-12-30 14:57:24

一.函数的定义和调用

1.初识函数

? 1.1 php函数分为:系统内部函数 和 自定义函数。

? 1.2 函数:封装一段用于完成特定功能的代码。

? 1.3 使用:只需关注函数的? 参数? 和? 返回值,就可以完成一个特定功能。

? 1.4 准则:应该提示出它的功能;函数名称以字母或下划线开头。

? 1.5 内置函数:php内部自带的函数。

? ? ? 例如:

<?php
$str = 'ABcd';
$P = strtoupper($str);		// 调用strtoupper()函数将$str转换成大写
$p = strtolower($str);		// 调用strtolower()函数将$str转换成小写
echo $P;			// 输出结果:ABCD
echo $p;			// 输出结果:abcd
?>

? 1.6 自定义函数:由使用者自由定义的函数。

? ? ? ? ?组成:关键字function:必须使用

? ? ? ? ? ? ? ? ? ? 函数名:必须符合PHP的标识符,不区分大小写

? ? ? ? ? ? ? ? ? ? 参数:外界传给函数的值,是可选的,多个参数之间用 , 分隔

? ? ? ? ? ? ? ? ? ? 函数体:用于实现特定功能的代码段

? ? ? ? ? ? ? ? ? ? 返回值:使用return

? ? ? ? ?即:

? ?

function 函数名([参数1,参数2,......])
{
   函数体...
}

? ? ? ?使用:

function 函数名 (参数) {
实现功能代码段 ;
return 返回值 ;
}

? ? ?例如:

?

<?php
function sum($a, $b){       // function 关键字,表示你要定义函数,sum是函数的唯一名字,调用时需要使用

	$x = $a+$b;
	return $x;       //return函数的返回值,调用函数的时候可以被接收

}
$re = sum(1,2);   //$re用于接收函数返回值的变量,xy()调用函数,1,2分别对应$a,$b参数
var_dump($re);
?>

另外需要注意的是:

(1).通过函数名实现调用,可以在函数声明之前调用,也可在之后

(2).如果函数有参数,可以通过传递参数改变函数内部代码执行

(3).如果函数有返回值,当函数执行完毕后,函数名可以当作保存值的变量使用

? ?

<?php
echo demo();
function demo(){
    return '功能区';
    }
echo demo() 
?>

(4).将函数的值传递给调用者,同时终止函数,如果执行了return,则return语句后面的内容将不会执行了

? ? ? 例如:

??

<?php
function demo(){
return "111111";
echo "3333";
return "222222";
}
echo demo();
?>

? 如上,执行了return "111111" 语句,则后面的语句并未执行。

2.参数设置

?2.1 无参设置:适用于不需要提供任何的数据即可以完成指定功能的情况。

? ? 例如:

??

function shout()
{
    return 'come on';
}
echo shout();// 输出结果:come on

运行可得:

?

2.2 按值传递参数:按此种方式定义的函数,在函数内部可以随意对用户传递的参数进行操作。

? ? 方式一:

??

echo add(5,7) ;

? ? 方式二:

??

$x = 5 ;
$y = 7 ;
echo add($x,$y) ;
function add($a, $b)
{
    $a = $a + $b;
    return $a;
}

? ?

? 另外需要注意的是:默认值必须是常量表达式,不能是变量。若有多个参数,可以指定默认值。带默认值的参数只能位于参数列表的末尾,也就是一个默认值参数的右边不能出现没有指定参数值的参数。

?例如:

? 错误示范:

function setPoint($x,$y=90,$z){
	echo "{".$x.",".$y.",".$z."}";
}
setPoint(5,0);

X

? ?错误之处是 $y=90 的右边出现了 $z,$z是没有指定参数值的。

正确的写法是;

function setPoint($x,$z,$y=0){
	echo "{".$x.",".$y.",".$z."}";
}
setPoint(5,90);

√

? 2.3 引用传参:如果需要函数修改它的参数值,则需要通过参数的引用传递。

? ? ? ? 实现方式:在参数前添加 "&" 符号即可。

? ? 例如:

? ?

<?php
function modify(&$string)
{
	$string = '我这下雪啦';
}
$string = '你那下雪啦吗?';
modify($str);
echo $string;  // 输出:'你那下雪啦吗?'
?>

?

<?php
function modify(&$string)
{
	$string = '我这下雪啦';
}
$str = '你那下雪啦吗?';
modify($str);
echo $str;  // 输出:'我这下雪啦'
?>

2.4 默认值参数:函数参数在设置时,可以指定默认值,即可选参数。当调用者未传递该参数时,函数将使用默认值进行操作。

<?php
function say($p, $con = '"Hello"')
{
    return "$p say $con";
}
echo say('Tom');
?>

2.5 弱参数设置:当用户调用函数时,如果传递的参数不是int类型,程序会将其强制的转换为int型后,再进行操作。

<?php
function sum1(int $a, int $b)
{
    return $a + $b;
}
echo sum1(2.6, 3.8); // 输出结果:5
?>

2.6 强类型参数设置:可以将其设置为强类型的参数,即当用户传递的参数类型不符合函数的定义,程序会报错提醒。语法为:declare(strict_types = 1);

? ?例如:

<?php
declare(strict_types = 1);
function sum2(int $a, int $b)
{
    return $a + $b;
}
echo sum2(2.6, 3.8);
?>

3.变量的作用域

?3.1 由作用域分为:在函数中定义的变量称为 局部变量

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 在函数外定义的变量称为 全局变量

? ? ? ?例如:

?

<?php
function test()
{
    $sum = 36; 	// 局部变量
    return $sum;
}
$sum = 0; 	// 全局变量
echo test();   	// 输出结果:36
echo '<br/>' ;
echo $sum;          	// 输出结果:0
?>

3.2 global全局变量:global关键字和超全局变量$GLOBALS[变量名]。

? ? 例如:

??

<?php
$x=100;
function test(){
	global $x;
$y=10;
	return $x+$y;
}
echo test();//110
?>

? ? 运行结果是:

?

?

<?php
$x=100;
function test(){
	$y=10;
	return $GLOBALS['x']+$y;
}
echo test();//110
?>

3.3 static静态变量:所有的全局变量都是静态变量,而局部变量只有定义时加上类型修饰符static,才为局部静态变量。

? ? 如果想知道一个函数被访问了几次,可以在函数中使用静态变量。

?例如:

? 局部变量:

??

<?php
function num()
{
    $i = 1;
    echo $i;
    ++$i;
}
echo num().'<br/>';
echo num().'<br/>';
echo num();
?>

??

? ?静态变量:

?

<?php
function num()
{
    static $i = 1;
    echo $i;
    ++$i;
}
echo num().'<br/>';
echo num().'<br/>';
echo num();
?>

? ?这样即可得到一个函数被访问的次数。

二.函数的嵌套调用

1.嵌套调用

? ? 指在调用一个函数的过程中,调用另外一个函数。

? ? 例如:一个老师要计算每个学生语文和英语平均分,那么他的思路是先要编写一个函数用来计算学生的语文和英语的总分,然后在编写一个函数用来计算平均分。

<?php
function sum($yuwen,$shuxue){
    $sun=$yuwen+$shuxue;
    return $sun;
    }
function avg($yuwen,$shuxue){
    $avg=sum($yuwen,$shuxue)/2;
    return $avg;
    }
    $avg=avg(50,80);
	echo $avg;
?>

2.递归调用

? ? ? ? ? 函数嵌套调用中的一种特殊调用,指在一个函数在其函数体内调用自身的过程,这种函数成为递归函数。

? 例如:求阶乘

?

<?php
function Fact($n) {
    $sum=1;
    if($n <= 1){
        return 1;
    }else{
        $sum = $n * fact($n-1);
        return $sum;
    }
}

echo "5 的阶乘为: " .Fact(5)."<br>";
echo "3 的阶乘为: " .Fact(3)."<br>";
echo "4 的阶乘为: " .Fact(4)."<br>";
echo "10 的阶乘为: " .Fact(10);
?>

运行后可得结果:

三.高级应用

1.可变函数

? ?可变函数就是在一个变量名后添加一对圆括号"()",使其变成一个函数的形式,然后PHP就会寻找与变量值同名的函数,并且执行它。

? 例如:

<?php
# 变量函数的用法:
function demo(){
	echo "天王盖地虎! ";
	}
$de='demo'; //将demo函数名赋给变量$de;
echo $de();//调用该变量名加();
?>

2.回调函数

? 回调函数是指具有callable类型的函数,一般用于参数的传递。PHP中内置了call_user_func函数,可以接受用户自定义的回调函数作为参数。

? 简单理解就是把函数作为参数 传给另一个函数中使用。

<?php
function qwe($name,$age){
echo "我叫$name 我$age 岁了 <br>";
}
call_user_func('qwe', "张三",'18');
call_user_func('qwe', "李四",'24');
?>

3.匿名函数

? ?匿名函数是指没有函数名称的函数,也叫做闭包函数,经常用作回调函数参数的值。另外就是,对于临时定义的函数,匿名函数不需要考虑函数名称冲突的问题。

? 需要注意的是,匿名函数可以直接把数赋值给变量,匿名函数仍然是函数,可以传入参数,直接把数赋值给变量,调用变量即为调用函数。

<?php
$sum = function($a, $b) {	// 定义匿名函数
    return $a + $b;
};
echo $sum(100, 200);	// 输出结果:300
?>

? ? 另外,匿名函数中使用外部的变量,需要通过使用use关键字实现。use关键字后的圆括号“()”中的内容就是要使用的外部变量列表,多个变量之间要用英文逗号“,”分隔。

? ?例如:

<?php
$c = 100;
$sum = function($a, $b) use($c) {
    return $a + $b + $c;
};
echo $sum(100, 200);  	// 输出结果:400
?>

? 最后,匿名函数还可以作为函数的参数传递,实现回调函数。

? ?例如:

<?php
function calculate($a, $b, $func)//回调函数
{
    return $func($a, $b);
}
echo calculate(100, 200, function($a, $b) { 	// 输出结果:300
    return $a + $b;
});
echo calculate(100, 200, function($a, $b) { 	// 输出结果:20000
    return $a * $b;
});
?>

四.内置函数

1.字符串函数

? ??PHP用来操作字符串的内置函数

函数名称描述
strlen()获取字符串的长度 //mb_strlen($str, 'UTF-8');
strpos()查找字符串首次出现的位置
strrpos()获取指定字符串在目标字符串中最后一次出现的位置strrpos($string,$target)
str_replace()用于字符串中的某些字符进行替换操作
substr()用于获取字符串中的子串
explode()使用一个字符串分割另一个字符串
implode()用指定的连接符将数组拼接成一个字符串
trim()去除字符串首尾处的空白字符(或指定成其他字符)
str_repeat()重复一个字符串
strcmp()用于判断两个字符串的大小(比较ascii码:A->65;a->97)

? ? ?例如:

??

<?php
//1. strlen():用于获取字符串的长度(string length)。
$str = "Hello World";
echo strlen($str); // 输出:11
echo '<hr/>';

// 2. strpos():用于查找字符串中另一个字符串第一次出现的位置(string position)。
$str = "Hello World";
echo strpos($str, "World"); // 输出:6
echo '<hr/>';

// 3. strrpos():用于查找字符串中另一个字符串最后一次出现的位置(string reverse position)。
$str = "Hello World";
echo strrpos($str, "o"); // 输出:7
echo '<hr/>';

// 4. str_replace():用于将字符串中的一部分替换为另一个字符串。
$str = "Hello World";
echo str_replace("World", "Universe", $str); // 输出:Hello Universe
echo '<hr/>';

//5. substr():用于获取字符串的一部分(substring)。
$str = "Hello World";
echo substr($str, 6); // 输出:World
echo '<hr/>';

//6. explode():用于将字符串拆分为数组。
$str = "Hello,World";
$arr = explode(",", $str);
print_r($arr); // 输出:Array ( [0] => Hello [1] => World )
echo '<hr/>';

//7. implode():用于将数组元素连接成字符串。
$arr = array("Hello", "World");
$str = implode(" ", $arr);
echo $str; // 输出:Hello World
echo '<hr/>';

//8. trim():用于去除字符串两端的空格或指定字符。
$str = "         Hello World   ";
$str2="Hello World";
echo trim($str); // 输出:Hello World
echo '<br/>';
echo trim($str2);
echo '<hr/>';

//9. str_repeat():用于重复字符串指定次数。
$str = "Hello ";
echo str_repeat($str, 3); // 输出:Hello Hello Hello
echo '<hr/>';

//10. strcmp():用于比较两个字符串(string compare)。
$str1 = "Hello";
$str2 = "World";
echo strcmp($str1, $str2); // 输出:-1

?>

2.获取字符串的长度

? ? PHP提供了mb_strlen函数用于获取字符串的长度。但是使用前要确保PHP配置文件中开启extension=php_mbstring.dll 扩展。

<?php
$str = 'PHP书籍';
echo strlen($str);	// 输出结果:9
echo '<br/>' ;

$str = 'PHP书籍';
echo mb_strlen($str, 'UTF-8'); // 输出结果:5
?>

3.数学函数

? ? ? 用于数学运算

函数名称描述
abs()取绝对值
ceil()向上取最接近的整数
floor()向下取最接近的整数
fmod()取除法的浮点数余数
is_nan()检查一个值是否为非数字(NaN)
max()取最大值
min()取最小值
pi()取圆周率的值
pow()计算x的y次方
sqrt()取平方根
round()对浮点数进行四舍五入
rand()生成随机整数

? ??

? ?例如:

? ?

<?php 
const hr='<hr/>';

#1. abs() 函数用于返回一个数的绝对值。
$num = -10;
echo abs($num); // 输出:10
echo hr;

#2. ceil() 函数用于向上取整,返回大于或等于指定数字的最小整数。
$num = 4.3;
echo ceil($num); // 输出:5
echo hr;

#3. floor() 函数用于向下取整,返回小于或等于指定数字的最大整数。
$num = 4.7;
echo floor($num); // 输出:4
echo hr;

#4. fmod() 函数用于返回两个数的浮点数余数。
$num1 = 10.5;
$num2 = 3;
echo fmod($num1, $num2); // 输出:1.5
echo hr;

#5. is_nan() 函数用于检查一个值是否为非数字(NaN)。
$num = acos(8);//acos()函数返回一个角度的反余弦值,范围在0到π之间。如果提供的值超出范围(-1到+1除外),acos()函数将返回NaN(非数字)。
echo $num;
echo '<br/>';
var_dump(is_nan($num)); // 输出:bool(true)
echo hr;

#6. max() 函数用于返回一组数中的最大值。
$num1 = 10;
$num2 = 20;
$num3 = 15;
echo max($num1, $num2, $num3); // 输出:20
echo hr;

#7. min() 函数用于返回一组数中的最小值。
$num1 = 10;
$num2 = 20;
$num3 = 15;
echo min($num1, $num2, $num3); // 输出:10
echo hr;

#8. pi() 函数用于返回圆周率的值。
echo pi(); // 输出:3.1415926535898
echo hr;

#9. pow() 函数用于返回一个数的指定次幂。
$num = 2;
$power = 3;
echo pow($num, $power); // 输出:8
echo hr;

#10. sqrt() 函数用于返回一个数的平方根。
$num = 16;
echo sqrt($num); // 输出:4
echo hr;

#11. round() 函数用于对一个数进行四舍五入。
$num = 4.6;
echo round($num); // 输出:5
echo hr;

#12. rand() 函数用于生成一个随机整数。
echo rand(); // 输出:随机整数
echo '<br/>';
echo getrandmax();//返回系统所能生成的最大随机数
?>

?

?运行的结果是:

文章来源:https://blog.csdn.net/2301_80919211/article/details/135229440
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。