PHP函数高级(二)

PHP函数高级(二)

PHP函数基础:https://www.cnblogs.com/lxwphp/p/9867840.html
 
1.函数分类:
定义:完成某些功能的代码段
系统函数:字符串,数组,数字,日期时间
自定义函数:按照具体需求封装的函数
2.函数的执行原理:
函数不调用不执行,当封装完函数之后将其载入到内存,当调用函数的时候,找到对应的函数,执行函数体;
当碰到return或执行到函数的末尾,再将控制权移交到调用的函数的位置上,接着程序继续执行。
3.注意:
   函数名称不能包含特殊字符,以字母或者下滑开头,后面跟上数字,字母,下划线。
函数名称最好以动词开头,最好含义明确,getExt(),uploadFile()
函数名称遵循驼峰法或者下划线。
函数名称不区分大小写,但是尽量遵循定义时的大小写进行调用。
函数名称不支持重名,如果重名会报致命性错误。
函数可以参数,也可以没有参数;
函数可以返回值,也可以没有返回值,return 返回值;
4.函数的返回值:
函数可以有0个或1个返回值,如果想返回多个值,可以通过返回数组或者对象形式实现。
函数通过return加返回值,函数碰到return立即结束。
函数的返回值可以是任意类型。函数默认返回null。
5.函数的参数
通过参数列表可以传递信息到函数,即以逗号作为分割符的表达式列表,参数是从左向右求值得;
函数可以带有0个或多个参数。
参数的数据类型可以为任意数据类型;
参数可以分为可选参数和必选参数,如果有可选参数和必选参数,必选参数一定在可选参数之前;
6.局部变量:
函数体内声明的变量为局部变量;
局部变量分为动态变量和静态变量;
函数执行完毕立即释放。
6.1动态变量:函数体内的变量,函数执行完毕,就释放。
7.静态变量:通过static关键字声明的变量为静态变量,当第一次调用函数的时候相当于初始化静态变量,当函数执行完毕之后静态变量并没有释放而是保存在静态内存中,当再次调用函数的时候首先从静态内存中取出变量的值再执行。
<?php
function test1(){
     $i=1;
    echo $i++,”\n”;
}
test1();
test1();
test1();
var_dump($i);
输出:1 1 1 

<?php
function test1(){
    static $i=1;
    echo $i++,”\n”;
}
test1();
test1();
test1();
var_dump($i);
输出:1 2 3  ,var_dump($i) 时,$i 是报错未定义的变量,$i是局部变量。

 
8.全局变量:
函数体外声明的变量,或者在函数体内通过global关键字声明的变量。
9.如何在函数体内使用全局变量
   a:通过global关键字
   b:通过$GLOBALS超全局变量,$GLOBALS包括$_GET,$_POST,$_ENV,$_SERVER
$a=1;
$b=2;
function test2(){
    global $a,$b;
    var_dump($a,$b);
    $a=3;
    $b=4;
}
test2();//int(1) int(2) 
var_dump($a,$b);//int(3) int(4)  修改的是全局变量$a,$b

 
function test3(){
    global $m,$n;
    $m=3;
    $n=6;
}
test3();//  如果不调用test3(),下面的$m,$n报错未定义
var_dump($m,$n);//int(3) int(6)  

 
10.可变函数
   在PHP中,如果将“函数名称”赋予字符串类型的变量,但是在使用该变量时,如果带有小括号,那么PHP引擎将解析函数。
注意:可变函数不能用于像,echo,print,unset(),isset(),empty(),include(),require(),以及类似的语言结构。
$funcname=”md5″;
echo $funcname(‘lxw’),”\n”;
echo “<br>”;
echo md5(‘lxw’);

 
echo “<pre>”;
print_r(get_defined_functions());//得到定义的函数
print_r(get_defined_constants());//得到定义的常量
print_r(get_defined_vars());//得到定义的变量
echo “</pre>”;

11.回调函数
定义:就是调用函数的时候将另外的一个函数的名称当作参数传递进去,并且在函数体中进行调用。
如何调用回调函数:
可以通过可变函数的形式在函数体中进行调用,
可以通过call_user_func()和call_user_func_array()进行调用。
扩展:range($start,$end):建立包含指定范围的单元的数组
<?php
var_dump(range(0,10));
输出:array(11) { [0]=> int(0) [1]=> int(1) [2]=> int(2) [3]=> int(3) [4]=> int(4) [5]=> int(5) [6]=> int(6) [7]=> int(7) [8]=> int(8) [9]=> int(9) [10]=> int(10) }

12.array_map()与array_walk()区别
array_map(callbakc,$array1):
callback:回调函数,
$array1:数组,遍历运行callbak函数。
返回数组,包含callback函数处理之后array1的所有元素;
var_dump(array_map(‘md5’,array(‘lxw’,’11’)));
输出:array(2) { [0]=> string(32) “275939945caa6f44d32a2bdb9687ca47” [1]=> string(32) “6512bd43d9caa6e02c990b0a82652dca” }

使用匿名函数:
<?php
$func = function($value) {
    return $value * 2;
};
 
print_r(array_map($func, range(1, 5)));

?>
//range(1, 5) 输出array(1,2,3,4,5)
输出:Array
(
    [0] => 2
    [1] => 4
    [2] => 6
    [3] => 8
    [4] => 10
)

$arr=array(1,2,3,4);
function test1($var){
    return $var*=2;
}
$res=array_map(‘test1’,$arr);
print_r($arr);
print_r($res);
 
function test2(&$var,$key,$p){
    return $var=$p.”:”.$var*3;
}
var_dump(array_walk($arr,”test2″,’this is’));
print_r($arr);

 
总结:array_map(callback,$arr):callback回调函数,$arr 运行的数组, 把数组中的每个值发送到用户自定义函数,返回新的值。
函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组。
回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致。
   
array_walk($arr,myfunction,$p): 函数对数组中的每个元素应用用户自定义函数。在函数中,数组的键名和键值是参数。 您可以通过把用户自定义函数中的第一个参数指定为引用:&$value,来改变数组元素的值, 函数对数组中的每个元素应用回调函数。如果成功则返回 TRUE,否则返回 FALSE。 典型情况下 myfunction 接受两个参数。array 参数的值作为第一个,键名作为第二个。如果提供了可选参数 userdata ,将被作为第三个参数传递给回调函数。
将函数名赋值为 null 时:
$a1=array(“Dog”,”Cat”);
$a2=array(“Puppy”,”Kitten”);
print_r(array_map(null,$a1,$a2));
输出:合并后的索引二维数组
Array
(
    [0] => Array
        (
            [0] => Dog
            [1] => Puppy
        )
    [1] => Array
        (
            [0] => Cat
            [1] => Kitten
        )
)

array_filter() 函数用回调函数过滤数组中的值。 该函数把输入数组中的每个键值传给回调函数。如果回调函数返回 true,则把输入数组中的当前键值返回结果数组中。数组键名保持不变。
$arr2=array(1,2,3,4,5,6,7);
function odd($var){
    if($var%2==1){
        return $var;
    }
}
print_r(array_filter($arr2,”odd”));
 
输出:Array ( [0] => 1 [2] => 3 [4] => 5 [6] => 7 )

call_user_func(myfunc,$param);
echo call_user_func(“md5”,’lxw’);//32位加密字符

call_user_func_array(myfunc,array);
function add($x,$y){
    return $x+$y;
}
 
function reduce($x,$y){
    return $x-$y;
}
echo “
“;
echo call_user_func_array(“add”,array(1,2));//3
echo call_user_func_array(“reduce”,array(3,5));//-2

13.匿名函数也叫闭包函数,允许创建一个没有指定名称的函数,最经常用作回调函数参数的值。匿名函数也可以作为变量的值来使用。
$func=function ($params){
    return “this is test  “.$params;
};
echo $func(“PHP”);
输出:this is test PHP

 
$func2=create_function(‘$x,$y’,’return $x+$y;’);
echo $func2(2,3);//5
 
$func1=create_function(‘$name’,’echo “hello world $name”;’);
echo $func1(‘lxw’);
输出:hello world lxw

$arr1=array(1,3,4);
print_r(array_map(function ($var){return $var*2;},$arr1));
输出:Array ( [0] => 2 [1] => 6 [2] => 8 )

14.递归函数 能少用就少用
通俗讲就是自己调用自己的函数,通过特定条件结束执行。
场景:PHP实现目录的遍历,目录的复制,删除非空目录操作;
          无极限分类也可以通过递归调用实现。
PHP函数高级(二)
 
test3(3);
输出:3 2 1 0

 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/112732.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • cefsharp文档在哪_hdfs创建目录

    cefsharp文档在哪_hdfs创建目录参考:https://github.com/cefsharp/CefSharp/issues/601https://gist.github.com/BlackBooth/19ce027c4f68c1eb4fc1144988ca6662关键点:(1)设置CefSettings的BrowserSubprocessPath属性为对应的CefSharp.BrowserSubprocess.exe的…

    2022年9月18日
  • origin带误差线的柱状图_怎么加误差棒

    origin带误差线的柱状图_怎么加误差棒软件版本:OriginPro2021b(64-bit)SR29.8.5.212(学习版)本期目标:接下来,正文开始:1,如图1,数据包含三个类型的数据列(X轴/Y轴/误差列)。A列表示X轴分组,B/D/F/H列表示Y轴数据,C/E/G/I列表示误差数据(此处为标准差)。注:此处数据设置为关键,需要按照正确,后面才可以绘制带有误差棒的分组柱状图。图1数据设置2,按照上图方式输入数据后,选中数据后,点击菜单栏——绘图——类别——多因子组柱状图-索引数据进行图形绘制,如图

    2022年9月29日
  • 5分钟搞定!java免费源码网站

    5分钟搞定!java免费源码网站一、前言最近刚读完一本书:《Netty、Zookeeper、Redis并发实战》,个人觉得Netty部分是写得很不错的,读完之后又对Netty进行了一波很好的复习(之前用springboot+netty+zookeeper模仿dubbo做rpc框架,那时候是刚学netty后自己造的小轮子)。虽然对于Netty的使用已经比较熟悉了,而且还知道它的底层是基于JavaNIO做进一步的封装,使得并发性能和开发效率得到大大的提升。但是,对于同步阻塞、同步非阻塞、异步这

    2022年7月8日
  • idea插件Tabnine激活码_在线激活

    (idea插件Tabnine激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~MLZPB5EL5Q-eyJsaWNlb…

    2022年3月21日
  • 关于sources.list和apt-get [转载]

    关于sources.list和apt-get [转载]

    2021年11月16日
  • 离别&#183;伤

    离别&#183;伤

    2021年12月13日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号