php基础之函数入门
2016-09-23 16:21
411 查看
函数基础
函数的定义
规范:function 函数名($args1,$args2){
// todo
}
1.$args1 $args2都属于函数的形参,作用域为函数体内
2.函数的形参由开发者自定义,但要遵循命名规范
函数的调用
规范:函数名(实参1,实参2);
示例:
/** * 计算两个数的和 * @param $a * @param $b * @return mixed */ function add($a, $b) { return $a + $b; } // 调用函数 $result = add(4, 1); // 输出函数执行结果 echo "<br> result = $result";
函数的执行过程
1.将函数调用时的实参数据,传递给函数的形参2.进入函数内部,顺序执行函数体代码
3.直到函数结束,或者遇到return语句,结束函数的执行
4.返回函数调用位置,继续执行原程序
函数的参数问题
参数默认值
在定义函数时,可以给指定的形参定义默认值,这样,在调用该函数时,可以不传此值。如果给参数的形参定义默认值的话,该形参应在放在没有默认值的形参之后,函数调用传值顺序是一对一的。
示例:
function test($a, $b = 3, $c = 'abc') { echo "<br> a = $a b = $b c = $c"; } test(1, 2, 'a'); test(3, 6); test(5);
结果为:
a = 1 b = 2 c = a a = 3 b = 6 c = abc a = 5 b = 3 c = abc
形参的传值
形参的传值,其实就是变量之间的传值传值方式有两种,一个是值传递,一个是引用传递
值传递
示例:
function demo1($a, $b) { $a = $a * $a; $b = $b * $b; return $a + $b; } $a = 2; $b = 3; echo "<br> before call demo1 a = $a b = $b"; demo1($a, $b); echo "<br> before call demo1 a = $a b = $b";
结果:
before call demo1 a = 2 b = 3 before call demo1 a = 2 b = 3
引用传递
示例:
function demo2($a, &$b) { $a = $a * $a; $b = $b * $b; return $a + $b; } $a = 2; $b = 3; echo "<br> before call demo2 a = $a b = $b"; demo2($a, $b); echo "<br> before call demo2 a = $a b = $b";
结果为:
before call demo2 a = 2 b = 3 before call demo2 a = 2 b = 9
可以发现,b的值已经发生变化,可以认为类似于C中的传的变量地址,方法修改的话,直接修改的变量地址所表示的值。
此时,只能传定义的变量,而不能直接传值进去,否则就会报错。
函数参数的数量
当声明一个函数,但是未定义形参,但是在调用的时候,往里面传递了参数,这种情况下,也是可以获取到调用者传递的参数信息,类似于系统提供的var_dump()函数。示例:
function getArgs() { echo "<br> 参数数组为: "; $arr = func_get_args(); foreach ($arr as $value) { echo $value . "\t"; } echo "<br> 参数个数为: " . func_num_args(); echo "<br> 第一个参数为: " . func_get_arg(0); } getArgs(1, 2, 3);
结果为:
参数数组为: 1 2 3 参数个数为: 3 第一个参数为: 1
函数的其它形式
可变函数
首先,来回顾一下可变变量。示例:
/** * 可变变量 * 一个变量的值是另外一个变量的变量名 */ $a = 'abc'; $abc = 123; echo "<br> result is : " . $$a;
结果:
result is : 123
好,再来看一下可变函数,都在代码里了,上
/** * 可变函数 * 一个函数的函数名是另外一个变量的值,当调用另外一个变量的时候加上()就可以调用次函数了 */ function test2() { echo "<br> this is ke bian function"; } $c = 'test2'; $c(); function jpg() { echo "<br> this is jpg function"; } function png() { echo "<br> this is jpg function"; } function gif() { echo "<br> this is jpg function"; } $fileName = 'abc.png'; //strrchr 获取指定字符串指定字符最后一次坐标出现后面的字符串 $suf = strrchr($fileName, '.'); //截取字符串 $realSuf = substr($suf, 1); $realSuf();
结果:
this is ke bian function this is jpg function
匿名函数
顾名思义,没有名称的函数。有两种表现形式,如下所示。将一个没有名字的函数赋值给一个变量,此时改变量就代表该匿名函数了
示例:
$a = function () { echo "<br> 这是匿名函数的第一种表现形式"; }; // 调用 $a();
结果:
这是匿名函数的第一种表现形式
讲匿名函数当实参使用,比如调用一个函数的时候,将匿名函数作为参数传递到目标函数中
示例:
function f1($a, $b, $c) { echo "<br> 这是匿名函数的第二种表现形式。结果为:" . $c($a, $b); } f1(2, 3, function ($m, $n) { return $m + $n; });
结果:
这是匿名函数的第二种表现形式。结果为:5
函数的作用域
作用域分类
作用域指一个变量可以使用的范围,php中有三种左右域。局部作用域
指一个函数内部的范围,定义的变量只能在该函数内部使用
这样的变量称之为局部变量
超全局作用域
指整个项目工程的范围
对应的变量称之为超全局变量
只有系统预设的几个,如:$_GET $_POST $_REQUEST $_SERVER $_COOKIE $_SESSION $_FILES $GLOBALS
全局作用域
不在函数内部的范围,也就是函数的外部
对应的变量成为全局变量
通常情况下:
全局范围不能访问局部变量
局部范围不能访问全局变量
函数内部的变量在函数执行完成后就销毁掉
函数内的静态变量在函数执行完后不被销毁
局部范围访问全局变量
方式一:示例:
$v = 10; function test() { // 使用global声明一个要使用的全局变量的同名局部变量 global $v;// 此处的$v是局部变量,但是和全局的$v指向同一个数据区域 echo "<br> test v = $v"; $v = 12; } echo "<br> befor call test ---> v = $v"; test(); echo "<br> after call test ---> v = $v";
结果:
befor call test ---> v = 10 test v = 10 after call test ---> v = 12
方式二:
示例:
$v1 = 18; function test2() { //使用超全局GLOBAL变量,根据变量名取数据 echo "<br> v1 = " . $GLOBALS['v1']; $GLOBALS['v1'] = 81; } echo "<br> befor call test2 ---> v1 = $v1"; test2(); echo "<br> after call test2 ---> v1 = $v1";
结果:
befor call test2 ---> v1 = 18 v1 = 18 after call test2 ---> v1 = 81
欧了,php函数的基础介绍就到这了~
相关文章推荐
- 一个关于if else容易迷惑的问题
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- JSP/PHP基于Ajax的分页功能实现
- 关于PHP通过PDO用中文条件查询MySQL的问题。
- 什么是设计模式
- PHP数据库长连接mysql_pconnect的细节
- Php Installing An Expansion
- Laravel5.3 表单验证中文报错提示语言包
- 10 件在 PHP 7 中不要做的事情
- rem : web app适配的秘密武器
- jquery高级应用之Deferred对象
- 关于浮动与清除浮动,你应该知道的
- 数组reduce方法的高级技巧
- php7 读取php.ini[4]
- Mootools 1.2教程 函数
- autoit InputBox 函数