函数基础

函数的定义:

形式:

function  函数名 ( 【$形参1】 【,$形参2】 【,.... 】  ){

//函数体。。。。。。

}

说明:

1,定义时使用的形参,其实就是一个变量——只能在该函数内部使用的变量

2,形参作为变量,其名字是“自己定义”——自然应该遵循命名规范;

函数的调用:

函数名($实参1, $实参2, ..... );

说明:

1,实参应该跟要调用的函数的形参“一一对应”;

2,实参就是“数据值”,可能是直接值(比如5,”abc”),也可能是变量值(比如$v1)

函数调用详细过程

1,首先,将函数调用时的实参数据,传递(赋值)给函数的形参(变量);

2,程序的执行流程,进入到函数内部——此时可以认为是一个跟外界“隔离” 的“独立运行空间”。

3,在函数内部,按正常的流程顺序,执行其中的代码;

4,直到函数结束,则退出该运行空,而返回到原来调用函数的位置,继续执行后续代码!

5,如果在函数内部执行的过程中,有return语句,则也会立即终止函数,并回到函数调用位置。

函数的参数问题

函数形参的默认值问题

我们可以给一个函数定义时的形参,赋值一个“默认值”,则这个函数调用的时候,该形参对应的实参,可以不给值。

函数形参的默认值,可以只给部分形参设置默认值,但设置默认值性的形参,都要放在“右边”(后边):

形参的传值问题

一句话:形参的传值问题,其实就是“变量之间的传值问题”:

其实无非就是实参变量,传值给形参变量的问题。

即:

此时,也同样有两种传值方式:

值传递:

这是默认值。如果没有特别设定,参数传值都是值传递。

引用传递:

需要在形参的前面加 &符号:

函数参数的数量问题

1,通常,函数调用时的实参数量,应该跟函数定义时的形参数量保持一致。

2,如果函数定义时,形参有默认值,则对应的实参就可以进行一定程度的省略:

注意:省略只能从右往左进行。

3,有一种定义和使用函数的特别形式(并不常见):它不定义形参,而实参任意给出。

其实,系统中也有类似的函数:,比如:

var_dump($v1);

var_dump($v1, $v2, $v3);     //ok!

可见,该函数就可以接受任意个数的实参;

我们自己也可以定义这种函数。其实,这种函数,依赖的是以下3个系统函数来获取相应的信息,以得到实参数据的处理:

1: func_get_args(); //获取实参数据列表,成为一个数组

2: func_get_arg($i);       //获取第$i个实参数据,$i从0开始算起;

3:func_num_args();     //获取实参的数量(个数)

下面就是例子:

函数的返回值问题

一个观念问题:

函数的返回值,不是语法规定,而是应用所需:需要就返回,不需要就无需返回。

返回值,一定是通过return语句!

形式:

function 函数名(....)

{

//。。。。。。

return  XX数据;

}

注意:

return语句的作用,不管后面跟不跟数据值,都会立即终止函数的执行,返回到函数调用的位置并继续后续工作。

函数的其他形式:

可变函数

先想想可变变量:

$v1 =”abc”;

$abc = 123;

echo  $$v1;   //输出123,这就是所谓的可变变量。

可变变量:一个变量的名字还是一个变量!

可变函数:一个函数的名字是一个变量!

演示可变函数的一个灵活性使用:

匿名函数

匿名函数就是没有名字的函数。

有2种形式的匿名函数:

形式1:将一个匿名函数“赋值”给一个变量——此时该变量就代表该匿名函数了!

形式2:

是直接将一个匿名函数,当做“实参”来使用!——即调用“别的函数A”的时候,使用一个匿名函数来当做实参。自然,在该函数A中,也就应该对该匿名函数当做一个函数来用!

变量的作用域问题

变量的作用域,就是指:一个变量,在什么范围中可以使用的情况。

php中,有3中变量作用域:

局部作用域:

就是指一个函数的内部范围。

对应这样的变量,就称为“局部变量”;

超全局作用域:

就是指所有的代码范围。

对应这样的变量,就称为“超全局变量”;

其实只有系统预定义的几个:$_GET, $_POST, $_SERVER, $_REQUEST, $GLOBALS, $_SESSION, $_COOKIE, $_FILES

全局作用域:

就是不在函数内部的范围——函数外部。

对应这样的变量,就称为“全局变量”;

通常,

1,全局范围不能访问局部变量;

2,局部范围不能访问全局变量;

3,函数内部的变量(局部变量),通常在函数调用执行结束后,就被“销毁”了。

4,但有一种局部变量,在函数调用结束后不被销毁:它叫做“静态变量”;

使用形式:

function 函数名 (....){

static  $变量名  =  初始值;   //这就是静态变量!

。。。。。。

}

如果在局部作用域使用(访问)全局变量?(常见需求)

有2种做法:

做法1:

使用global关键字来实现:

做法2:

使用$GLOBALS超全局变量来实现:

但,如果我们对$GLOBALS变量的某个单元(也即下标)进行unset,则其就会完全对应销毁该变量。

这是因为,$GLOBALS对全局变量的使用可以看做是全局变量的另一种语法形式而已,而不是“引用关系”,举例如下:

有关函数的系统函数:

  • function_exists():判断一个函数是否被定义过。其中使用的参数为“函数名”:
  • func_get_arg($i):    获取第i个实参值
  • func_get_args():     获取所有实参(结果是一个数组)
  • func_num_args():   获取所有实参的个数。

PHP函数(function)相关推荐

  1. 深入理解javascript中的立即执行函数(function(){…})()

    2019独角兽企业重金招聘Python工程师标准>>> javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各 ...

  2. js立即执行函数: (function ( ){...})( ) 与 (function ( ){...}( ))

    ( function(){-} )() ( function (){-} () ) 是两种javascript立即执行函数的常见写法,最初我以为是一个括号包裹匿名函数,再在后面加个括号调用函数,最后达 ...

  3. Python编程基础:第二十节 函数Function

    第二十节 函数Function 前言 实践 前言 目前为止,我们已经学习了常见的数据类型以及逻辑结构.但是代码都只能运行一次,如果想多次运行该段代码就得重复写多次.为了避免书写冗余的代码,我们需要引入 ...

  4. Golang 函数function

    函数function Go函数不支持嵌套.重载和默认参数 但支持以下特性: 无需声明原型 不定长度变参 多返回值 命名返回值参数 匿名函数 闭包 定义函数使用关键字func,且左大括号不能另起一行 函 ...

  5. JS-立即执行函数(function(){...})() amp;amp; (function(){...})()

    在学习闭包的过程中遇到了(立即执行),之前见到(function(){...})() && (function(){...}())这种写法,就没有去知其所以然,也不会去写这种函数.所以 ...

  6. 数据库系列之mysql 自定义函数function,函数和存储过程的区别

    mysql 自定义函数function,函数和存储过程的区别 https://blog.csdn.net/u010365819/article/details/80470448 https://blo ...

  7. JS:1.3,函数(function)

    ylbtech-JS:函数-导航 函数定义 返回函数 调用一个函数 调用一个函数(带参数) 返回值的函数 调用外部的js文件 JS:3.1,函数(function)-定义 返回顶部 1,定义函数语法 ...

  8. C语言试题五十七之假定输入的字符串中只包含字母和*号。请编写函数function,它的功能是:删除字符串中所有*号。在编写函数时,不得使用c语言提供的字符串函数。

    1. 题目 假定输入的字符串中只包含字母和*号.请编写函数function,它的功能是:删除字符串中所有*号.在编写函数时,不得使用c语言提供的字符串函数. 2 .温馨提示 C语言试题汇总里可用于计算 ...

  9. C语言试题五十五之m个人的成绩存放在score数组中,请编写函数function,它的功能是:将高于平均分的人数作为函数值返回,将高于平均分的分数放在high所指定的数组中。

    1. 题目 m个人的成绩存放在score数组中,请编写函数function,它的功能是:将高于平均分的人数作为函数值返回,将高于平均分的分数放在high所指定的数组中. 2 .温馨提示 C语言试题汇总 ...

  10. C语言试题四十七之程序定义了N×M的二维数组,并在主函数中自动赋值。请编写函数function(int a[N][M], int m),该函数的功能是:将数组右上半三角元素中的值乘以m。

    1. 题目 程序定义了N×M的二维数组,并在主函数中自动赋值.请编写函数function(int a[N][M], int m),该函数的功能是:将数组右上半三角元素中的值乘以m. 2 .温馨提示 C ...

最新文章

  1. 说出一些数据库优化方面的经验?
  2. 链表的建立,搜索,插入,反转,销毁以及合并有序链表。
  3. SQL中truncate table和delete的区别 --转
  4. Java集合之List的equals方法
  5. Python爬虫_正则表达式小例子
  6. 写给自己的CDSN账号
  7. 关于更新win10 1903后VM ware无法启动的解决方法
  8. libtorch显存管理示例
  9. GitHub建立个人网站(一)
  10. Python - 怎么将一个数字拆分成多个随机数字
  11. FPGA芯片供电总结
  12. python画双折线图-python双折线图
  13. Visio画出简单的拓扑图
  14. 管理 - STAR法则
  15. 在美国学CS能挣多少钱?美国IT公司标准 offer package详细数字及绿卡政策 | 美国留学申请与就业找工作咨询博客|Warald|一亩三分地论坛...
  16. 浮点数例外(吐核)错误
  17. Neo4j 查询语法入门
  18. QT的firstblood
  19. C++基础笔记(一)
  20. 显卡Memory Clock上限问题排查实践

热门文章

  1. linux下查看vnc端口_记一次VNC远程连接Linux问题解决记录(5900端口测试、KDE桌面安装)...
  2. 字符串倒序函数 java_编写将给定字符串倒序输出的函数[Java笔试题]
  3. 你不知道的管理大师乔布斯:最高级的管理是激发潜能和善意!
  4. 科技类 论文常用词 替换词汇 避免词汇过度使用 (overused words)
  5. python判断子串
  6. Calendar计算两个时间之间相差几个月
  7. 父亲节python代码半个心_这些父亲节借势方案,哪一句戳中了你的心?
  8. 划分模块的准则:高内聚低耦合
  9. 最新一段为你网站加新年灯笼的代码
  10. 量化投资界领头羊-明汯投资