一篇文章带你理解php中的函数

简介: 一篇文章带你理解php中的函数

一:PHP中的函数


1.函数的基本语法


函数,英文名为function ,而function也有功能的含义,可以理解为函数就是功能,调用一个函数就是实现一个功能,函数的两个特点,可以随时调用,可以重复调用,


对于函数,我们一般分为两大类,自定义函数和系统函数


2.自定义函数


php提供了很多功能强大的函数,但仍然不能满足程序猿的一些需求,这时候就需要程序猿根据自己的需求来创建函数,即自定义函数,定义格式如下


function 函数名([参数名1[=值1], 参数名2[=值2], 参数名n[=值n]])
{
      // 函数中的功能体
    // return 返回值
}

注意:1.这里的参数其实就是变量


         2.定义的函数名并不区分大小写,这一点很多人都会忘记


         3.函数可以多次调用,但是不能多次定义同名函数


         4.函数名只能是字母,数字,下划线的组合


         5.函数的参数可以设置默认值,如下:,此时就算调用时不传参也不会报错

function test( $arg = 10){
       echo $arg;
}

6.在代码层面可以先调用,在后面再创建该函数


3.回调函数


回调函数其实就是在一个函数的参数位置传入另外一个函数,配合第一个参数的执行,这样说着有点抽象,下面用php中文网的代码例子给你们看看


<?php
function woziji($one,$two,$func){
       //我规定:检查$func是否是函数,如果不是函数停止执行本段代码,返回false
       if(!is_callable($func)){
               return false;
       }
       //我把$one、$two相加,再把$one和$two传入$func这个函数中处理一次
       echo $one + $two + $func($one,$two);
}
//我们定义几个函数试试
function plusx2( $foo , $bar){
       $result = ($foo+$bar)*2;
       return $result;
}
function jian( $x , $y ){
   $result = $x - $y;
   return $result;
}
//调用一下函数,woziji,向里面传入参数试试
echo woziji(20,10,'plusx2') .'<br>'; // 90
//将plusx2改成jian试试结果
echo woziji(20,10,'jian'); // 40
?>


就是调用函数时在要填入变量的位置填入函数作为变量

注意:这里也可以自己调用自己,在递归中常用


4.匿名函数


匿名函数就比较简单了,就是没有函数名的函数,匿名函数也有两种常用的格式,下面我们来介绍一下


1.变量函数式的匿名函数


例子如下:


<?php
$greet = function($name)
{
 echo $name.',你好';
};
$greet('明天');
?>


调用时直接用定义的greet变量加上()即可使用,也可以理解为将这个变量当做了函数名


2.回调式的匿名函数


这个就更简单,当我们编写自定义函数时,不想专门去写一个回调函数,就可以在调用回调函数的位置用匿名函数代替,如下


woziji(20,30,function( $foo , $bar){
               $result = ($foo+$bar)*2;
               return $result;
           }
);

如上,本来woziji函数的第三个参数应该是我们定义好的函数名,但是我们不想再另外定义,就可以在这里使用匿名函数


5.内部函数


内部函数顾名思义就是在函数内部又重新定义了一个函数,需要注意的只有两点


内部函数名,不能是已存在的函数名


假设在函数a里面定义了一个内部函数,不能调用两次函数a。


要调用内部函数的时候要先调用外面的函数


单独调用外部函数时,不会执行内部函数


6. 变量作用域


我们几天前就已经接触了变量这个概念,但是变量也有自己作用的范围,不在其范围内便无法使用该变量,比较常见的就是函数内定义的变量跟函数外没有任何关系,那如果我想在函数外调用函数内的变量,或者反过来,就没有办法了吗?


这里就要讲到我们的$GLOBALS和GLOBAL了,先讲$globals,这里给出几个例子


1.$GLOBAL


<?php
//函数内读取外部变量
$one = 10;
function demo(){
   $two = 100;
   $result = $two + $GLOBALS['one'];
   return $result;
}
//你会发现结果变成了110
//同理,不仅可以在函数内调用外界变量,修改或者创建外部变量也可以
//注意:创建的全局变量需要先调用函数才可以在外界使用
echo demo();
?>


2.GLOBAL


再讲一下GLOBAL ,用法也很简单,就是在global的后面跟上变量名,这个变量就可以在程序的任何地方使用了,就像下面这样


global $a , $b;


7.参数的引用


例如$a=&$b,这是变量的引用,让他们指向同一个存储空间,此时两者变化同步,而参数的引用也是这样,将 形参和实参指向同一存储空间,两个的值此时也会同步变化


<?php
$foo = 100;
//注意:在$n前面加上了&符
function demo(&$n){
       $n = 10;
       return $n + $n;
}
echo  demo($foo).'<br />';
//你会发生$foo的值变为了10
echo $foo;
?>


大致意思就是通过&将$n指向$foo所在的存储空间,所以这里改变$n的值,$foo也会同步改变


8.递归函数


这里的递归函数跟前面的回调函数有异曲同工之妙,回调函数是在函数内调用其他函数,但是丢鬼函数实在函数里调用自身,即自己调用自己,下面有一个例子


<?php
$n = 2;
function dg( $n ){
   echo $n.'<br />';
   $n = $n - 1;
   if($n > 0){
       //在函数体内调用了dg自己哟
       dg($n);
   }else{
       echo '--------------';
   }
   echo '我是最后一个哦!' . $n . '<br />';
}
dg($n);
?>


这也是个很简单的东西,大致就是一个函数会根据你传入的值做不同的处理,不断调用自身并执行函数体,直到传入的值不适合在这个函数运行,就退出 ,有些代码基础的应该很容易懂,看不懂的可以下载后运行试试


9.静态变量


静态变量主要为了解决一个问题——某个函数被调用了多少次?


简单的说就是在函数里面定义一个新变量,并给他一个值,函数每次被调用,变量就会做对应的改变,比如定义了一个$a=0,函数每次调用都执行$a++,最后得到的$a的值就是函数的调用次数


10.系统函数


上面讲的都根据我们的需求自定义功能的函数,系统函数就是系统已经定义好了,功能也固定,需要时候直接调用就可以了,由于太多了,就不一个一个讲了,这里是php中文网整理的常用系统函数


还是比较推荐大家去看一看


相关文章
|
7月前
|
设计模式 PHP
php设计模式--装饰模式(七)装饰模式完成文章编辑
php设计模式--装饰模式(七)装饰模式完成文章编辑
41 0
|
3月前
|
PHP
php常见问题,php.ini文件不存在或者找不到,mb_strlen()函数未定义系列问题,dll模块找不到的解决
本文介绍了解决PHP常见问题的步骤,包括定位和创建`php.ini`文件,以及解决`mb_strlen()`函数未定义和DLL模块加载错误的具体方法。
php常见问题,php.ini文件不存在或者找不到,mb_strlen()函数未定义系列问题,dll模块找不到的解决
|
1月前
|
关系型数据库 MySQL 数据库连接
PHP内置函数
PHP内置函数
28 5
|
3月前
|
存储 API PHP
php学习笔记-php数组的创建和使用,数组常用函数-day03
关于PHP数组的创建、使用以及常用函数的详细学习笔记。
php学习笔记-php数组的创建和使用,数组常用函数-day03
|
2月前
|
Unix PHP 数据库
PHP日期和时间Date()函数获取当前时间
通过灵活运用 `date()`函数及其丰富的格式选项,PHP开发者可以轻松地在应用程序中处理和展示日期及时间信息。无论是需要精确到秒的完整时间戳,还是仅仅展示日期或时间的某一部分,`date()`函数都能胜任。理解并熟练应用这些格式化技巧,对于提升代码的可读性和维护性至关重要。
68 1
|
3月前
|
XML SQL PHP
php学习笔记-php字符串及字符串常用函数总结-day04
本文总结了PHP中字符串的三种定义方式和常用字符串处理函数,包括字符串的修剪、转换、长度计算、子串操作、比较、连接、分割及替换等操作。
|
3月前
|
设计模式 存储 算法
PHP中的设计模式:策略模式的深入解析与应用在软件开发的浩瀚海洋中,PHP以其独特的魅力和强大的功能吸引了无数开发者。作为一门历史悠久且广泛应用的编程语言,PHP不仅拥有丰富的内置函数和扩展库,还支持面向对象编程(OOP),为开发者提供了灵活而强大的工具集。在PHP的众多特性中,设计模式的应用尤为引人注目,它们如同精雕细琢的宝石,镶嵌在代码的肌理之中,让程序更加优雅、高效且易于维护。今天,我们就来深入探讨PHP中使用频率颇高的一种设计模式——策略模式。
本文旨在深入探讨PHP中的策略模式,从定义到实现,再到应用场景,全面剖析其在PHP编程中的应用价值。策略模式作为一种行为型设计模式,允许在运行时根据不同情况选择不同的算法或行为,极大地提高了代码的灵活性和可维护性。通过实例分析,本文将展示如何在PHP项目中有效利用策略模式来解决实际问题,并提升代码质量。
|
4月前
|
Linux PHP
Linux CentOS 宝塔 Suhosin禁用php5.6版本eval函数详细图文教程
【8月更文挑战第27天】本文介绍两种禁用PHP执行的方法:使用`PHP_diseval_extension`禁用和通过`suhosin`禁用。由于`suhosin`不支持PHP8,仅适用于PHP7及以下版本,若服务器安装了PHP5.6,则需对应安装`suhosin-0.9.38`版本。文章提供了详细的安装步骤,并强调了宝塔环境下与普通环境下的PHP路径差异。安装完成后,在`php.ini`中添加`suhosin.so`扩展并设置`executor.disable_eval = on`以禁用执行功能。最后通过测试代码验证是否成功禁用,并重启`php-fpm`服务生效。
62 2
|
4月前
|
JavaScript 前端开发 PHP
|
4月前
|
监控 数据库连接 PHP
php中register_shutdown_function函数用法详解
通过 `register_shutdown_function`,PHP开发者可以对脚本的终止进行更精细化的处理,这个函数让开发者能在脚本的生命周期结束时有机会执行最后的操作,无论脚本是正常结束还是发生错误。由于它的高度实用性和灵活性,`register_shutdown_function`是PHP开发中不可或缺的工具之一。
72 0