PHP学习之函数

本文详细介绍了PHP中的函数定义、参数传递方式、返回值处理以及可变函数和匿名函数等内容。

一、用户自定义函数

函数的命名规则:函数名和 PHP 中的其它标识符命名规则相同。有效的函数名以字母或下划线打头,后面跟字母,数字或下划线。可以用正则表达式表示为:[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*

注意:函数无需在调用之前被定义,除非是下面两个例子中函数是有条件被定义时。(函数可以是先定义再调用,但不是必须的 ,也可以先调用再定义,如下例中bar()函数;有条件的函数必须是先定义再调用,例如,foo函数,其定义是有条件的,所以必须满足条件才能被调用!)


还有一种是函数中的函数:如下例子中


注意:PHP 中的所有函数和类都具有全局作用域可以定义在一个函数之内而在之外调用,反之亦然。PHP 不支持函数重载也不可能取消定义或者重定义已声明的函数。注意: 函数名是大小写无关的,不过在调用函数的时候,使用其在定义时相同的形式是个好习惯。在 PHP 中可以调用递归函数。

二、函数的参数

通过参数列表可以传递信息到函数,即以逗号作为分隔符的表达式列表。参数是从左向右求值的。PHP 支持按值传递参数(默认),通过引用传递参数以及默认参数。也支持可变长度参数列表

通过引用传递参数:

默认情况下,函数参数通过值传递(因而即使在函数内部改变参数的值,它并不会改变函数外部的值)。如果希望允许函数修改它的参数值,必须通过引用传递参数如果想要函数的一个参数总是通过引用传递,可以在函数定义中该参数的前面加上符号 &


默认参数

PHP 还允许使用数组 array 特殊类型 NULL 作为默认参数,例如:

补充:is_null()函数用于检测变量是否为 NULL。如果指定变量为 NULL,则返回 TRUE,否则返回 FALSE。

补充:join()函数返回一个由数组元素组合成的字符串。是 implode() 函数的别名。join() 函数接受两种参数顺序。但是由于历史原因,explode() 是不行的,您必须保证 separator 参数在 string 参数之前才行。join() 函数的 separator 参数是可选的。但是为了向后兼容,推荐您使用两个参数。语法:join(separator,array)。参数:separator,可选。规定数组元素之间放置的内容。默认是 ""(空字符串);array,必需。要组合为字符串的数组。


运行结果:


注意:默认值必须是常量表达式,不能是诸如变量,类成员,或者函数调用等。注意:当使用默认参数时,任何默认参数必须放在任何非默认参数的右侧;否则,函数将不会按照预期的情况工作。



注意: 自 PHP 5 起,传引用的参数也可以有默认值。

类型声明

类型声明允许函数在调用时要求参数为特定类型。 如果给出的值类型不对,那么将会产生一个错误: 在PHP 5中,这将是一个可恢复的致命错误,而在PHP 7中将会抛出一个TypeError异常。为了指定一个类型声明,类型应该加到参数名前。这个声明可以通过将参数的默认值设为NULL来实现允许传递NULL




严格类型

默认情况下,如果能做到的话, PHP将会强迫错误类型的值转为函数期望的标量类型 。 例如,一个函数的一个参数期望是 string ,但传入的是 integer ,最终函数得到的将会是一个 string 类型的值。可以基于每一个文件开启严格模式。在严格模式中,只有一个与类型声明完全相符的变量才会被接受,否则将会抛出一个TypeError。 唯一的一个例外是可以将integer传给一个期望float的函数。
使用 declare 语句和strict_types 声明来启用严格模式:
注意:启用严格模式同时也会影响返回值类型声明.
注意:严格类型适用于启用严格模式的文件内的函数调用,而不是在那个文件内声明的函数。 一个没有启用严格模式的文件内 调用了一个在启用严格模式的文件中定义的函数,那么将会遵循调用者的偏好(弱类型),而这个值将会被转换。
注意:严格类型仅用于标量类型声明,也正是因为如此,这需要PHP 7.0.0 或更新版本,因为标量类型声明也是在那个版本中添加的。




可变数量的参数列表

PHP 在用户自定义函数中支持可变数量的参数列表。在 PHP 5.6 及以上的版本中,由 ... 语法实现;在 PHP 5.5 及更早版本中,使用函数 func_num_args()func_get_arg(),和 func_get_args() 。



三、返回值

值通过使用可选的返回语句返回。可以返回包括数组和对象的任意类型。返回语句会立即中止函数的运行,并且将控制权交回调用该函数的代码行。注意:如果省略了 return,则返回值为 NULL

函数不能返回多个值,但可以通过返回一个数组来得到类似的效果。


从函数返回一个引用,必须在函数声明和指派返回值给一个变量时都使用引用运算符 &:





四、可变函数

PHP 支持 可变函数 的概念。这意味着 如果一个变量名后有圆括号 PHP 将寻找与变量的值同名的函数,并且尝试执行它 。可变函数可以用来实现包括回调函数,函数表在内的一些用途。
可变函数不能用于例如 echoprintunset()isset()empty()includerequire 以及类似的语言结构。需要使用自己的包装函数来将这些结构用作可变函数。
<?php
//可变函数示例
header("Content-type: text/html; charset=utf-8");
function foo(){
echo "In foo( )" . "<br/>\n";
}
function bar($arg = ' '){//参数的默认值为空
echo "In bar( ); argument was " . $arg . "<br/>\n";
}
//使用echo的包装函数
function echoit($string){
echo $string;
}
$func = 'foo';//变量$func的值和函数foo( )同名。
$func( );//这会调用foo( )函数(即,变量值与函数同名的变量后加( )会调用同名函数)

$func = 'bar';//变量$func的值和函数bar( )同名。
$func('test');//这里会调用bar( )函数

$func = 'echoit';//变量$func的值和函数echoit( )同名。
$func('test');//这里会调用echoit( )函数
?>


补充: unset()函数用于销毁给定的变量;语法:void unset (mixed $var [, mixed $...]),其中$var为要销毁的变量。该函数没有返回值。

补充:isset()函数用于检测变量是否已设置并且非 NULL如果已经使用 unset() 释放了一个变量之后,再通过 isset() 判断将返回 FALSE 若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE。同时要注意的是 null 字符("\0")并不等同于 PHP 的 NULL 常量。

四、匿名函数

匿名函数 (Anonymous functions),也叫 闭包函数 closures ),允许 临时创建一个没有指定名称的函数 。最经常用作回调函数( callback )参数的值。当然,也有其它应用的情况。 匿名函数目前是通过 Closure 类来实现的 闭包函数也可以作为变量的值来使用 。PHP会自动把此种表达式转换成内置类  Closure  的对象实例。把一个 closure 对象赋值给一个变量的方式与普通变量赋值的语法是一样的,最后也要加上分号。


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值