您的位置:首页 > 编程语言 > PHP开发

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函数的基础介绍就到这了~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息