渐进式编程之旅:探寻PHP函数的奇妙世界

简介: 欢迎来到渐进式编程之旅!在编程的世界中,函数是一种强大而重要的工具,而PHP函数更是让我们能够创造出令人惊叹的网络应用程序和网站的关键。你是否曾经想过探寻PHP函数的奇妙世界,深入了解它们的工作原理以及如何利用它们来解决编程难题?本文将带你踏上这个神奇之旅,一起揭开PHP函数的面纱,探索这个渐进式编程世界的无限可能性。

前言

欢迎来到渐进式编程之旅!在编程的世界中,函数是一种强大而重要的工具,而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函数的世界中探索出属于自己的奇妙旅程!



目录
相关文章
|
12天前
|
存储 数据处理 PHP
深入浅出PHP编程之数组操作技巧
【10月更文挑战第30天】在PHP编程的海洋里,数组是一艘承载着数据结构的小船,掌握其操控之道,能让开发者在编码的旅程中乘风破浪。本文将带你领略数组的强大功能,从基础使用到高级应用,一步步揭开数组操作的神秘面纱。准备好你的航海装备,让我们启航吧!
32 4
|
1月前
|
SQL 关系型数据库 MySQL
如何学习PHP编程?
【10月更文挑战第2天】如何学习PHP编程?
38 9
|
1月前
|
存储 前端开发 PHP
PHP编程之探索与实践
【10月更文挑战第2天】在这篇文章中,我们将一起探索PHP编程的世界。PHP是一种广泛使用的开源服务器端脚本语言,它适用于Web开发。文章将详细介绍PHP的基本概念、语法和常用功能,并提供实用的代码示例。无论你是初学者还是有一定经验的开发者,都可以从中获得启发和帮助。让我们一起开启PHP编程的旅程吧!
|
1月前
|
安全 IDE 测试技术
PHP编程中的错误处理与调试技巧
【9月更文挑战第33天】在代码的世界里,错误是不可避免的。它们像是旅途中的绊脚石,挑战着开发者的耐心和智慧。本文将带你走进PHP的错误处理机制,教你如何优雅地面对和解决这些“意外的小惊喜”。从基本的语法错误到逻辑上的漏洞,我们将一起探索如何通过错误报告、自定义错误处理和调试技巧来提升代码质量。准备好,让我们开始这段寻找并消灭错误的旅程吧!
|
5天前
|
关系型数据库 MySQL 数据库连接
PHP内置函数
PHP内置函数
14 5
|
6天前
|
自然语言处理 安全 PHP
深入浅出PHP编程:从基础到实战
【10月更文挑战第36天】本文将带你走进PHP的奇妙世界,无论你是初学者还是有一定经验的开发者,都将从中获益。文章首先介绍PHP的基础概念和语法,然后通过实际代码示例,展示如何利用PHP进行高效的Web开发。最后,我们将探讨一些高级主题,如面向对象编程、数据库操作以及安全性问题。让我们一起开启PHP的学习之旅吧!
|
7天前
|
存储 Serverless PHP
PHP编程入门:从基础到实战
【10月更文挑战第35天】本文将带你走进PHP的世界,从最基本的语法开始,逐步深入到实际应用。我们将通过简单易懂的语言和实际代码示例,让你快速掌握PHP编程的基础知识。无论你是初学者还是有一定经验的开发者,都能在这篇文章中找到你需要的内容。让我们一起探索PHP的魅力吧!
|
13天前
|
自然语言处理 关系型数据库 MySQL
PHP编程入门:构建你的第一个网页应用
【10月更文挑战第29天】本文旨在引导初学者步入PHP编程的世界,通过深入浅出的方式介绍PHP的基础知识,并指导读者如何动手实践,搭建一个简单的网页应用。文章不仅涉及PHP代码的编写,还包括了环境配置、项目结构设计以及前后端交互的基本概念。适合对Web开发感兴趣且希望快速入门的朋友阅读。
24 0
|
1月前
|
PHP 开发者
PHP编程中的面向对象基础
【9月更文挑战第36天】在PHP的世界中,面向对象编程(OOP)是一块基石。它不仅为代码带来了结构、可维护性与重用性,还让复杂的问题变得简单化。通过掌握类与对象、继承与多态等核心概念,开发者可以构建出更加强大和灵活的应用。本文将引导你理解这些概念,并通过实例展示如何在PHP中应用它们,让你轻松驾驭OOP的力量。
|
18天前
|
存储 Java PHP
PHP编程之旅:从基础到实战
【10月更文挑战第23天】本文将带你走进PHP的世界,探索这个流行的服务器端脚本语言的魅力。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的信息和实用的代码示例。我们将从PHP的基本概念开始,然后深入到实际应用中,最后通过一个实战项目来巩固所学知识。让我们一起开启这段激动人心的PHP编程之旅吧!
20 0