• PHP函数


    函数概念  函数就是一组代码的集合,主要目的是实现代码的重用 。函数可以分成系统函数用户自定义函数

    语法: function 函数名(形参){

          函数体

       }

      函数名(实参)     // (函数的调用)

    注意

    1, 即使没有实参列表,也不能省掉小括号

    2,函数必须先声明才能调用,但是在书写代码的时候可以先调用然后再写函数的定义的代码,因为脚本的在执行之前会进行一次预编译,预编译后函数的定义代码已经放置在内存中的用户代码区,而执行的时候,直接在用户代码区里找

    函数命名规范

    1, 函数名遵守基本的标识符的命名规则,但函数名不区分大小写,一般用小驼峰法来表示!(注明:习惯上以后的类名用大驼峰法,因为类名也不区分大小写)

    2, 函数不能重复定义,所以在定义用户自己的函数的时候,注意函数名不能与系统函数名相冲突

    可变函数  所谓的可变函数,就是指函数名也可以用一个变量来代替!

    匿名函数  PHP也允许定义没有名字的函数,叫作匿名函数!  所谓的匿名函数,就是在定义的时候省略掉函数名即可

          作用:更加灵活,对系统资源消耗比较少!

    函数的参数  形参和实参

    形式参数parameter

    形参,是在定义函数的时候规定的,但是这里的参数只是一个形式,默认是没有值的,只是说明此处需要使用一个数据来代替,当然,定义函数的时候也可以没有形参!

       形参必须是一个变量

    形参的默认值  常见的,形参的值应该来源于实参传递的值,但是,如果某些形参的值有比较常用的情况,此时,我们可以在定义形参的时候给该参数一个默认值!

    注意:

    1,如果一个函数存在多个形参,那么其中有默认值的形参应该放在整个形参列表的后面

    2,参数的默认值,应该是一个确定的直接值,不能是一个变量或其他函数返回值!也不能是参与运算的值!

    实际参数argument

    实参,是在调用函数的时候需要把实际的值(实参)传递给该函数的形参,这个时候,函数的形参才有真正的数据!实参也可以是一个变量

    参数的值传递  默认的就是值传递,此时实参传递给形参之后,两者就没有关系了

    参数的引用传递  需要在传递的时候加上求地址运算符 。& 应该放在形参的前面

     一般来说,我们认为函数只能有一个返回值(允许在代码内出现多个return语句,但是只能执行一条,因为一旦遇到return语句就马上结束函数的执行)!

    但是,我们可以利用引用传递,实现可以类似的返回多个值的效果

    参数的数量问题  一般来说,实参和形参的数量应该一样,也就是一一对应

    实参多于形参  可以正常的运行,所有形参按实参的顺序依次接收,多于的实参直接舍弃

    实参少于形参  只有一种正常的情况,就是形参列表的后面有默认值的时候,可以省掉形参变量的实参值!除此之外,要报一个warning级别的错误

    不确定参数  比如系统函数max

    func_get_arg() : 获得某个参数的值,使用参数的索引位置来表示。从0开始,比如 func_get_arg(1)

    func_num_args() :获得实参的数量!

    函数体中的return语句  函数体就是可执行的代码的集合,以完成相应的功能!其中一个return语句比较重要!

    return语句的作用有两个:1, 将函数的返回值,返回给调用该函数的位置!2, 终止函数的运行!

    注意: 一个函数可以有多个return语句,但是只会执行其中的一条!如果一个函数确实有很多个值需要返回,可以用引用传递模拟(其实不叫返回值),最常用的是将这些值放到一个数组里面,然后返回这个数组就行了

    变量的作用域  变量的作用域,就是指一个变量在哪能用在哪不能用,也就是一个变量其作用的有效范围!

    PHP中,用户定义的变量支持两种作用域:局部作用域和全局作用域

    局部作用域在一个函数内部定义的变量,其作用范围就是局部作用域,该变量也叫作局部变量!

    全局作用域在函数外部定义的变量,其作用范围就是全局作用域,该变量也叫作全局变量,但是PHP中的全局作用域与JS中的全局作用域是不一样的:

    所以:

    1, PHP中的全局和局部作用域是完全不重叠的,也就是相互之间不能访问!

    2, 每个函数也都有自己的局部作用域,函数直接的变量也无法互相访问!

    超全局变量  也是作用域的概念,但却是用户不能直接定义的作用域!也就是说,用户无法定义一个超全局变量!

    所谓的超全局变量,有点类似于JS中的全局变量,也就是在全局和局部(函数外和函数内)都可以使用的变量!

    既然用户无法定义超全局变量,说明超全局变量都是系统预定义的!也就是我们前面学习的那些超全局预定义数组变量!

    预定义变量$GLOBALS  预定义变量$GLOBALS就是专业将用户的数据超全局化的!

    “专业精神”体现在如下的方面:

    1$GLOBALS数组的每一个元素,都与当前的每一个全局变量是一一对应的,也就是说,每当用户创建一个全局变量,都会自动的在$GLOBALS数组里面增加一个元素,其中元素的键就是全局变量的名字,元素的值就是全局变量的值!

    2,反之,每当增加一个$GLOBALS数组的一个元素,就会自动的创建一个全局变量!

    3,此时全局变量与$GLOBALS的关系并不是引用传递的关系,甚至比引用传递更“亲密”,因为它们所有的操作都是同步的,无论其中的一个做了任何的修改,都会以直接的相同的方式影响到另一个!

    变量的生命周期  所谓的变量的生命周期,就是指变量在上面时候出现(“出生”),又在什么时候消失(“死亡”)!

    全局变量的生命周期:

    1, 执行到变量的初始化语句的时候出现

    2, PHP所有的资源(包括全局变量),都会在一个脚本周期结束的时候全部消失!

    3,全局变量被unset之后也会消失

    局部变量的生命周期:

    1, 在调用到该函数并执行到该局部变量的初始化语句的时候出现

    2, 在函数内如果unset掉该局部变量也会消失

    3, 当函数执行完毕后就消失

    静态局部变量  所谓的静态局部变量,是指该变量不会随着函数执行的结束而消失,而是,只要这个函数还在(在内存),该变量就一直存在!

    最大特点:每次调用该函数后,其中的静态局部变量都会被保存下来而不会消失(下次调用该函数的时候可以接着使用)

    定义静态局部变量的关键字:   static也就是在定义局部变量的时候前面加上static关键字就行了

    注意: 无论有没有static关键字,在函数内部定义的变量都是局部变量,函数外一样不能使用!所以,要注意区分静变量的生命周期与变量作用域之间的区别

    函数的递归调用

    递归的含义  递归其实不是一种新的语法,而是一种算法的描述!

    语法上,所谓的函数的递归调用,就是函数在执行的时候自己调用自己

    函数的递归有两个要素:

    1, 递归出口:就是什么时候停止自己调用自己

    2, 递归点:就是什么时候开始自己调用自己

    先写递归出口再写递归点

    递归调用的特点:

    1, 代码的书写比较简单,但是执行的时候比较消耗内存资源!(使用迭代思想 

    2, 递归的本质就是以空间换取时间!

     

    例如:

    迭代思想   迭代就是从前往后来解决问题,体现在代码上,其实就是一个步骤的重复的执行,也就是循环结构!

     例如:

  • 相关阅读:
    ISP整体流程介绍
    Demosiac 去马赛克 (CIP)
    ISP-CMOS图像传感器内部结构及工作原理
    数字图像显示原理
    浅析图像到视频
    摄像机gamma校正
    理解 Pix Binning
    人工智能"眼睛"——摄像头
    CMOS 摄像头的Skipping 和 Binning 模式
    android 向服务器发送json数据,以及发送头信息的三种方式
  • 原文地址:https://www.cnblogs.com/czhd666/p/6084031.html
Copyright © 2020-2023  润新知