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)
上一篇 2021年10月31日 下午12:00
下一篇 2021年10月31日 下午12:00


相关推荐

  • Haar-like特征提取原理

    Haar-like特征提取原理Haar like 是一种非常经典的特征提取算法 尤其是它与 AdaBoost 组合使用时对人脸检测有着不错的效果 虽然只是在当时而言 OpenCV 也对 AdaBoost 与 Haar like 组成的级联人脸检测做了封装 所以一般提及 Haar like 的时候 一般都会和 AdaBoost 级联分类器 人脸检测 积分图等等一同出现 但是 Haar like 本质上只是一种特征提取算法 下面我们只从特征提取的角度聊一聊

    2026年3月18日
    2
  • Java作业2.0

    Java作业2.0设计一个用户类User,类中的变量有用户名、密码和记录用户数量的变量,定义3个构造方法:无参的、为用户名赋值的、为用户名和密码赋值的,还有获取和设置密码的方法和返回类信息的方法。packageJa

    2022年7月2日
    31
  • statickeyword于C和C++用法

    statickeyword于C和C++用法

    2022年1月14日
    57
  • eclipse安装mybatis插件_mybatis分页插件原理

    eclipse安装mybatis插件_mybatis分页插件原理![第一步![](https://img-blog.csdnimg.cn/20191025163208216.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMjUxNzE0,size_16,color_FFFFFF,t_70)…

    2022年10月6日
    6
  • PyCharm安装torch以及pytorch-pretrained-bert简单使用

    PyCharm安装torch以及pytorch-pretrained-bert简单使用安装torch运行Pycharm中的代码时候提示ModuleNotFoundError:Nomodulenamed‘torch’。试了很多种方法都不行,然后进入官网查了下具体的安装方法,附上网址https://pytorch.org/get-started/previous-versions/。摘取一段放在这里供大家参考。#CUDA10.0pipinstalltorch===1.2.0torchvision===0.4.0-fhttps://download.pytorc

    2022年8月28日
    5
  • 风讯.NET与NETCMS的选择—开源.NET内容管理系统

    风讯.NET与NETCMS的选择—开源.NET内容管理系统最近想要学习做一个网站,本来在某公司实习的时候,boss就要求快速的建立一个非盈利性的门户站点,当时用的是动易的SiteFactory3.0版本,感觉用起来也是很不错的,尤其是后台的可视化编缉做得是相当的到位,内容的采集部分也是很好使,初学者只要是不太笨的基本上就可以快速建立起一个功能比较好的站点了,不过令人没想到的是,建立好站点好以后才真的是恶梦的开始,boss提出要求,对它进行二次的开发,基…

    2026年4月19日
    4

发表回复

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

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