1. 定义和调用函数
在php中,函数使用关键字function来定义,通常由函数名称、参数、函数体和返回值四部分构成。其中传入的参数可以为多个,其间由“,”隔开,示例代码如下:
<?php
function printMsg($msg){
echo $msg;
}
?>
在自定义的函数中,可以自定义函数名用于表示某个函数,php中不允许函数重名。在命名函数时还要注意,函数名不能以数字开头,只能包含数字、字母、下划线。函数名不区分大小写。参数的作用是使函数外部向函数中传递数值。在函数的参数列表中,可以没有参数,也可以有一个或多个参数。可以根据函数的功能确定写不写返回值,可以返回任何数据类型,包括数组、对象、资源等。
调用函数的方法:在php中,可以使用函数名直接调用,后跟需要传入的参数并用小括号括起来,如果没有需要传入的参数,则只写小括号。调用系统内置的函数和调用自定义函数的方法相同。
2. 参数
函数在使用过程中,需要将外部数据传递到函数的内部来使用,这时就需要函数带有参数。函数的参数可以是一个或多个,多个参数之间使用逗号(,)隔开,从而构成参数列表。
一旦函数带有参数,当调用函数时,就需要向函数传递参数,被传入的参数称为实参,而定义函数时的参数称为形参,形参用来接受实参。
在工作中,我们有时还会将任意数量的参数传递给函数。php中的func_num_args函数返回参数的总数,func_get_args函数返回参数的具体信息。示例代码如下:
<?php
function demo_parameters(){
$all_parameters = func_get_args();
foreach($all_parameters as $key => $value){
echo "键:$key => 值:$value<br/>\n";
}
}
demo_parameters(1, 2, 3, 'Hello');
demo_parameters();
?>
在php中可以使用传递参数的方式有:按值传递(默认)、按引用传递、默认参数值。
2.1 按值传递
按值传递是指参数在调用函数前后不发生改变,传递给函数的只是这个参数的值。也就是说在传递参数时函数范围内部对这些值的任何改变都会在函数外部被忽略掉。php中除了对象类型外,其他类型的参数传递方式都是值传递。
<?php
function example($num){
$num = $num + 1;
return $num;
}
$num = 10;
echo example($num);
echo " ";
echo $num;
?>
输出结果为:11 10
2.2 按引用传递
在函数内部,如果希望形参操作的结果对实参有影响,那么可以使用按引用传递。按引用传递是将实参的内存地址传递到形参中,也就是说,形参是实参的一个引用,因此函数调用结束后,形参的改变会直接影响实参。引用传递方式是在形参前加上“&”号。
<?php
function example(&$num){
$num = $num + 1;
return $num;
}
$num = 10;
echo example($num);
echo " ";
echo $num;
?>
此时得到的结果为:11 11
2.3 默认参数值
在php中定义函数时,参数可带默认值,在不传入数据时有默认值的参数直接被赋值为默认值。这样在开发项目中可以节省每次输入参数的时间。
<?php
function member($name, $sex = '男'){
echo '姓名:'.$name.' 性别:'.$sex.'<br/>';
}
member('Jim');
member('Lily', '女');
?>
当使用默认参数时,默认参数必须放在非默认参数的右侧,否则函数可能出错。
3. 函数的作用域和可见性
在php中,函数的作用域是用来控制函数及函数中的变量在哪里可见并且可用的。
● 函数的作用域是指函数内部声明的变量作用域,从声明的那条语句开始到该函数的末尾。
● 全局作用域是指在函数外部声明的变量作用域,从声明那条语句开始到声明所在文件的末尾。
● 使用关键字global或$GLOBALS[]数组可以手动指定一个函数中使用的变量为全局变量。
● 通过参数列表传递给函数的变量,对于函数来说是局部变量,但是在传递时带有引用符号(&)的例外。
4. 用变量存储函数的名称
php可提供用变量存储函数名称的功能,这充分显示了php的灵活性和易用性。当在变量后追加小括号时,php将自动解析变量值是否为一个函数名,如果是,则直接执行该函数。
<?php
function example($num){
echo $num;
}
$fn = 'example';
$fn(10);
?>
5. 使用和包含文件
为了更好的组织代码,使自定义的函数可以在同一个项目的多个文件中使用,通常将多个自定义的函数组织到同一个文件或多个文件中。这些收集函数定义的文件就是创建的php函数库。如果想要在php的脚本中使用这些文件中定义的函数,就需要使用include和require将函数库文件载入脚本程序中。
5.1 include和require
include和require是php中最常见的两种方式,它们的使用方法可用如下示例代码表示(假设这两个php文件在同一目录下):
demo1.php
<?php
include('demo2.php');
print_num(10);
?>
demo2.php
<?php
function print_num($num){
echo $num;
}
?>
include与require的区别主要包括以下几点:
● 当找不到被包含的文件时,require将输出错误,而include输出警告。执行include时,浏览器将会声称很多警告,然后继续执行下面的代码,而require则声称致命错误并及时终止脚本的处理。
● include和require支持相对路径和绝对路径。如果没有指定明确的路径,php将会在当前目录中查找文件,然后查找pgp.ini文件include_path设置中列出的目录。include_path可以自己修改,修改这一设置后续重启Web服务器。
php的脚本也可以有返回值(如果没有声明任何返回值,则返回值为NULL),这样就可以让当前脚本中的变量去接收包含文件的返回值。示例代码如下:
demo1.php
<?php
return 'demo1.php';
?>
demo2.php
<?php
$str = include('demo1.php');
echo $str;
?>
5.2 文件包含和函数范围
当把函数从脚本移动到包含文件中时,要注意包含语句的位置,因为函数要先声明才能被调用。