前言
欢迎来到渐进式编程之旅!在编程的世界中,函数是一种强大而重要的工具,而PHP函数更是让我们能够创造出令人惊叹的网络应用程序和网站的关键。你是否曾经想过探寻PHP函数的奇妙世界,深入了解它们的工作原理以及如何利用它们来解决编程难题?本文将带你踏上这个神奇之旅,一起揭开PHP函数的面纱,探索这个渐进式编程世界的无限可能性。
这是本篇文章的脉络图:
一、函数的定义和调用
1.1 初识函数
1.1.1 函数分类
PHP 的真正威力源自于它的函数。在 PHP 中,提供了超过 1000 个内建的函数。
php函数分为:系统内部函数和自定义函数。
函数:封装一段用于完成特定功能的代码。
当使用一个函数时,只需关心函数的参数和返回值,就可以完成一个特定的功能。
PHP 函数准则:
1.函数的名称应该提示出它的功能
2.函数名称以字母或下划线开头(不能以数字开头)
1.1.2 自定义函数
自定义函数顾名思义,就是需要我们自己来定义的函数。我们在实际开发当中需要很多功能去反复调用,而这些反复要使用到的功能,我们可以定义成功能(函数)。
函数的定义由以下4部分组成:
1.关键字function
2.函数名
3.参数
4.函数体
格式:
function 函数名([参数1, 参数2, ……]) { 函数体…… }
注:
1.function:在声明函数时必须使用的关键字。
2.函数名:要符合PHP的标识符,且函数名是唯一的,不区分大小写。
3.[参数1, 参数2…]:外界传递给函数的值,它是可选的,多个参数之间使用逗号“,”分隔。
4.函数体:函数定义的主体,专门用于实现特定功能的代码段。
5.返回值:需要使用return关键字将需要返回的数据传递给调用者。
函数只有被调用后,才开始真正执行函数中的代码,执行完毕,返回调用函数的位置继续向下执行。
注:
1、通过函数名实现调用,可以在函数声明之前调用,也可在之后。
2、如果函数有参数,可以通过传递参数改变函数内部代码执行。
3、如果函数有返回值,当函数执行完毕后,函数名可以当作保存值的变量使用。
1.1.3 return关键字
在大部分编程语言中,return关键字可以将函数的执行结果返回,PHP中return的用法也大同小异,对初学者来说,掌握PHP中return的用法也是学习PHP的一个开始。
首先,它的意思就是返回,return()是语言结构而不是函数。 它的作用是将函数的值传递给调用者,同时终止函数。它只有一个返回值。
注意:如果执行了return,则return语句后面的内容将不会被执了。
例如:
<?php function demo(){ return "111111"; echo "3333"; return "222222"; } echo demo(); ?>
1.2 参数设置
对于函数来说,参数的不同设置,决定了其调用和使用方式。
1.2.1 无参函数
适用于不需要提供任何的数据即可以完成指定功能的情况。
例如:
function shout() { return 'come on'; } echo shout();// 输出结果:come on
1.2.2 按值传递参数
PHP默认支持按值传递参数,按此种方式定义的函数,在函数内部可以随意对用户传递的参数进行操作。
例如:
// 方式一 echo add(5, 7); // 方式二 $x = 5; $y = 7; echo add($x, $y); function add($a, $b) { $a = $a + $b; return $a; }
注意:默认值必须是常量表达式,不能是变量。如果函数有多个参数,可以为多个参数指定
默认值。但是,带默认值的参数只能位于参数列表的最后,即一个默认值参数的右边不能出
现没有指定参数值的参数。
例如:
function setPoint($x,$z,$y=0){ echo "{".$x.",".$y.",".$z."}"; } setPoint(5,90);
1.2.3 引用传参
在开发中,若需要函数修改它的参数值,则需通过函数参数的引用传递。实现方式只需在参数前添加“&”符号即可。
例如:
$var = 'food'; extra($var); // 输出结果:food and some extra echo $var; function extra(&$str) { $str .= ' and some extra'; }
1.2.4 设置参数默认值
函数参数在设置时,还可以为其指定默认值,也就是可选参数。当调用者未传递该参数时,函数将使用默认值进行操作。
例如:
function say($p, $con = 'say "Hello"') { return "$p $con"; } // 输出结果:Tom say "Hello" echo say('Tom');
1.2.5 指定参数类型(弱)
在PHP 7.0及以上的版本后,在自定义函数时,可以指定参数具体是哪种数据类型。
当用户调用函数时,如果传递的参数不是int类型,程序会将其强制的转换为int型后,再进行操作,这种方式称为弱类型参数设置。
例如:
function sum1(int $a, int $b) { return $a + $b; } echo sum1(2.6, 3.8); // 输出结果:5
除此之外,还可以将其设置为强类型的参数,即当用户传递的参数类型不符合函数的定义,程序会报错提醒。
例如:
declare(strict_types = 1);//是php7引入的严格类型检查模式的指定语法 function sum2(int $a, int $b) { return $a + $b; } echo sum2(2.6, 3.8); // 输出结果:Fatal error: ......
1.3 变量的作用域
1.3.1 变量分类
变量只有在其作用范围内才可以被使用,这个作用范围称为变量的作用域。
1.在函数中定义的变量称为局部变量
2.在函数外定义的变量称为全局变量
示例:
function test() { $sum = 36; // 局部变量 return $sum; } $sum = 0; // 全局变量 echo test(); // 输出结果:36 echo $sum; // 输出结果:0
1.3.2 全局变量的使用
在函数中可以通过参数传递,global关键字和超全局变量$GLOBALS[‘x’]使用全局变量。
1.通过global关键字使用全局变量:
$x=100; function test(){ global $x;$y=10; return $x+$y; } echo test();//110
2.通过超全局变量$GLOBALS[‘x’]使用全局变量:
$x=100; function test(){ $y=10; return $GLOBALS['x']+$y; } echo test();//110
1.3.3 global关键字
我们经常会遇到一种情况,在函数外部声明了一个全局变量后,我们想在函数内部访问或者修改这一全局变量,这里我们就需要使用一个叫global的关键字来实现。
global作用:在函数内创建一个局部变量,使用global关键字使其成为全局变量的同名引用。我们需要借助global关键字来实现。
例如:
<?php $var = '1';//全局变量 function foo(){ global $var;//在函数内创建一个局部变量,使用global关键字使其成为全局变量的同名引用 $var = '2'; } foo(); echo $var;//2 ?>
二、函数的嵌套调用
2.1 嵌套调用
嵌套调用:指的是在调用一个函数的过程中,调用另外一个函数,这种在函数内调用其他函数的方式称为嵌套调用。
1、所谓嵌套函数,就是在函数中定义并调用其他函数。
2、嵌套函数可以将一个复杂的功能分解成多个子函数,再通过调用的方式结合起来,有利于提高函数的可读性。
举例:班主任老师要计算每个学生语文和数学平均分,其实现思路是首先编写一个函数用于计算学生的语文和数学的总分,然后再编写一个函数用于实现学生的平均分。
<?php function sum($yuwen,$shuxue){ $sun=$yuwen+$shuxue; return $sun; } function avg($yuwen,$shuxue){ $avg=sum($yuwen,$shuxue)/2; return $avg; } echo avg(50,20); ?>
2.2 递归调用
递归调用:是函数嵌套调用中一种特殊的调用。它指的是一个函数在其函数体内调用自身的过程,这种函数成为递归函数。
递归调用是一种解决方案,一种逻辑思想,将一个大工作分为逐渐减小的小工作,只不过在程序中,就是依靠函数嵌套这个特性来实现了。
举例:求n的阶乘,计算公式为1×2×3×…×n。如4的阶乘等于1×2×3×4=24。
用for循环的方法思路:因为求n的阶乘,就是求1乘以2乘以3...一直乘到n的乘积。所以for循环的初始条件可设置为 i = 1,限制条件可以是 i <= n 或者 i < n+1。 然后循环体中的就是乘法运算了,将每次循环的 i 值相乘,得到一个乘积。最后输出乘积即可。
用递归的方法:
<?php function Fact($n) { $sum=1; if($n <= 1){ return 1; }else{ $sum = $n * fact($n-1); return $sum; } } echo "2 的阶乘为: " .Fact(2)."<br><br>"; echo "3 的阶乘为: " .Fact(3)."<br><br>"; echo "4 的阶乘为: " .Fact(4)."<br><br>"; echo "10 的阶乘为: " .Fact(10); ?>
三、函数的高级应用
3.1 静态变量
所有的全局变量都是静态变量,而局部变量只有定义时加上类型修饰符static,才为局部静态变量。
通过在函数中使用静态变量可以轻松得到一个函数被访问的次数。
举例:
1.局部变量的例子:
<?php function num() { $i = 1; echo $i; ++$i; } echo num(); echo "<br />"; echo num(); ?>
说明:第1次调用函数num()输出1,第2次调用函数num()会输出1,不论调用多少次num()函数,输出都会为1。
2.静态变量的例子:
<?php function num() { static $i = 1; echo $i; ++$i; } echo num(); echo "<br />"; echo num(); ?>
说明:第1次调用函数num()输出1,第2次调用函数num()会输出2,依次类推…
3.2 可变函数
可变函数:可变变量,它的实现是在一个变量前添加一个“$”符号,就变成了另外一个变量。 可变函数的实现就是在一个变量名后添加一对圆括号“()”,让其变成一个函数的形式,然后PHP就寻找与变量值同名的函数,并且尝试执行它。(可变函数就是将定义好的函数名赋值给一个变量,然后通过这个变量来调用。)
例如:
//变量函数的用法: function demo(){ echo "天王盖地虎! "; } function demo1(){ echo "宝塔镇河妖! "; } $de='demo'; //将demo函数名赋给变量$de; echo $de();//调用该变量名加(); $ee='demo1';//将demo1函数名赋给变量$ee; echo $ee();
可变函数的实现就是在一个变量名后添加一对圆括号“()”,让其变成一个函数的形式,然后
PHP就寻找与变量值同名的函数,并且尝试执行它。
3.3 回调函数
回调函数(callback):指的就是具有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.4 匿名函数
匿名函数:就是没有函数名称的函数,也称作闭包函数,经常用作回调函数参数的值。对于临时定义的函数,使用匿名函数无需考虑函数命名冲突的问题。
例如:
<?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; }); ?>
四、PHP的内置函数
4.1 字符串函数
字符串函数是PHP用来操作字符串的内置函数,在实际开发中有着非常重要的作用。下面是一些常用的字符串函数及其功能说明:
1. strlen($string): 返回字符串的长度(字符数)。 例如:strlen("Hello") 返回 5,因为 "Hello" 包含 5 个字符。
2. strpos(haystack,haystack, needle): 在字符串中查找指定子字符串的位置,并返回第一次出现的索引位置。 例如:strpos("Hello, world!", "world") 返回 7,因为 "world" 第一次出现在第 7 个位置。
3. strrpos(haystack,haystack, needle): 与 strpos() 类似,但是从字符串的末尾开始查找指定子字符串的位置,并返回最后一次出现的索引位置。 例如:strrpos("Hello, world!", "o") 返回 8,因为 "o" 最后一次出现在第 8 个位置。
4. str_replace(search,search, replace, $string): 在字符串中查找指定的子字符串,并将其替换为另一个字符串。 例如:str_replace("World", "Universe", "Hello, World!") 返回 "Hello, Universe!"。
5. substr(string,string, start, $length): 返回字符串的子串,从指定的起始位置开始,并可选择指定长度。 例如:substr("Hello, world!", 7, 5) 返回 "world",因为从第 7 个位置开始的 5 个字符是 "world"。
6. explode(delimiter,delimiter, string): 将字符串根据指定的分隔符拆分为数组。 例如:explode(",", "apple,banana,orange") 返回 ["apple", "banana", "orange"]。
7. implode(glue,glue, array): 将数组中的元素连接成一个字符串,使用指定的粘合剂(分隔符)。 例如:implode(", ", ["apple", "banana", "orange"]) 返回 "apple, banana, orange"。
8. trim($string): 去除字符串两边的空格和其他特定字符。 例如:trim(" Hello ") 返回 "Hello",因为两边的空格被去除了。
9. str_repeat(string,string, times): 将字符串重复指定次数。 例如:str_repeat("Hello", 3) 返回 "HelloHelloHello"。
10. strcmp(str1,str1, str2): 比较两个字符串的大小。返回一个整数值,如果两个字符串相等则返回 0,如果第一个字符串小于第二个字符串则返回负数,如果第一个字符串大于第二个字符串则返回正数。 例如:strcmp("apple", "banana") 返回一个负数。
4.2 数学函数
为了方便开发人员处理程序中的数学运算,PHP内置了一系列的数学函数,用于获取最大值、最小值、生成随机数等常见的数学运算。下面是一些常用的PHP数学函数及其功能说明:
1. abs($number): 返回给定数的绝对值。 例如,abs(-5)返回5。
2. ceil($number): 向上取整,返回大于或等于给定数的最小整数。 例如,ceil(4.2)返回5。
3. floor($number): 向下取整,返回小于或等于给定数的最大整数。 例如,floor(4.8)返回4。
4. fmod(number,number, divisor): 返回给定数除以除数的余数。 例如,fmod(7, 3) 返回1,因为7除以3的余数是1。
5. is_nan($number): 判断给定值是否为NaN(Not a Number)。如果给定的值不是数字,则返回true,否则返回false。 例如,is_nan(sqrt(-1)) 返回true,因为对负数的开方结果是NaN。
6. max(number1,number1, number2, ...): 返回给定数中的最大值。 例如,max(5, 8, 3)返回8。
7. min(number1,number1, number2, ...): 返回给定数中的最小值。 例如,min(5, 8, 3)返回3。
8. pi(): 返回圆周率 π 的近似值。 例如,pi()返回3.1415926535898。
9. pow(base,base, exponent): 返回给定基数的指定次幂。 例如,pow(2, 3) 返回8,因为2的3次幂是8。
10. sqrt($number): 返回给定数的平方根。 例如,sqrt(16) 返回4,因为4的平方是16。
11. round(number,number, precision): 对给定数进行四舍五入取整。可选择指定小数点精度。 例如,round(3.14159, 2) 返回3.14,保留两位小数。
12. rand(min,min, max): 返回指定范围内的一个随机整数。 例如,rand(1, 10) 返回1到10之间的一个随机整数。
4.3 时间日期函数
在使用PHP开发Web应用程序时,经常会涉及日期和时间管理。 例如倒计时、用户登录时间、新闻发布时间、购买商品时下订单的时间等。 为此,PHP提供了内置的日期和时间处理函数,满足开发中的各种需求。下面是一些常用的PHP时间日期函数及其功能说明:
1. time() 函数返回当前的Unix时间戳,即从1970年1月1日起经过的秒数。它通常被用来获取程序的执行时间或生成时间戳。
2. date(format,format, timestamp) 函数将给定的时间戳格式化为指定的日期字符串。format是日期格式化字符串,format是日期格式化字符串,timestamp是可选的时间戳,默认为当前时间。 例如,date('Y-m-d H:i:s') 将返回当前时间的年份、月份、日期、小时、分钟和秒数。
3. mktime(hour,hour, minute, second,second, month, day,day, year) 函数根据给定的小时、分钟、秒、月、日和年返回一个日期的Unix时间戳。它常用于构建特定的日期和时间。 例如,mktime(0, 0, 0, 1, 1, 2022) 返回2022年1月1日的时间戳。
4.strtotime(time,time, now) 函数将日期时间字符串转换为Unix时间戳。time是要转换的字符串,time是要转换的字符串,now是可选的基准时间,默认为当前时间。它能够处理各种格式的日期时间字符串,例如"2022-01-01"、“next Monday”、"tomorrow"等。
5. microtime(函数返回当前的时间戳和微秒数。getasfloat)函数返回当前的Unix时间戳和微秒数。get_as_float) 函数返回当前的Unix时间戳和微秒数。get_as_float参数是可选的,如果设置为true,则返回浮点数形式的时间戳。这个函数通常用于测量代码的执行时间。
总结
在本篇博客中,我们深入探索了PHP函数的世界,体验了一段渐进式的编程之旅。我们从基础开始,了解了什么是PHP函数以及如何定义和调用它们。我们探讨了不同类型的函数,包括内置函数、自定义函数以及匿名函数。通过实际示例,我们学习了如何使用这些函数来处理数据、实现特定功能和构建可扩展的应用程序。
感谢您跟随我的渐进式编程之旅,希望这篇博客为您带来了有益的知识和启发。祝您在PHP函数的世界中探索出属于自己的奇妙旅程!