博学谷——让IT教学更简单,让IT学习更有效
第三章 补充案例
案例3-1 函数的调用
一、案例描述
1、 考核知识点
函数的调用
2、 练习目标
? 掌握函数的定义与调用之间的关系
3、 需求分析
在PHP中,程序对函数是进行预处理的,所以在同一个文件中,定义和调用函数是没有先后之分的,但是当我们调用包含文件中的函数时定义和调用函数是不是也没有先后之分呢?
现在举例假设:在functions_inc.php中定义一个获得最小值的函数getMin($m,$n),我们在一个测试的文件func.php中,先调用getMin($m,$n)函数,再包含functions_inc.php文件,来看看我们的猜测是否正确吧。
4、 设计思路(实现原理)
1)在functions_inc.php中定义一个获得最小值的函数getMin($m,$n),并返回执行结果。
2)在测试文件func.php中,先调用getMin($m,$n),并输出结果,再包含文件functions_inc.php。
二、案例实现
1、在functions_inc.php文件中,定义getMin($m,$n),代码如下:
function getMin($m, $n) { }
return $m<$n ? $m : $n;
2、测试文件func.php,代码如下:
echo getMin(23, 17);
include './functions_inc.php';
运行程序,函数定义与调用不在同一个文件中,调用在包含文件的前面,或报函数未定义的错误,结果如下图所示:
1
博学谷——让IT教学更简单,让IT学习更有效
三、案例总结
1、在同一文件中,可以先调用后定义函数。原因:PHP会对函数进行预处理。但这样的习惯不好。 2、如果调用的函数在包含文件中,不能先调用,后包含。原因:在程序运行过程中,编译器只是对其进行语法检查,而include语句只有在被执行时才会读入要包含的文件,即定义函数文件。
案例3-2 函数的返回值 一、案例描述
1、考核知识点
函数的返回值
2、 练习目标
? 掌握函数的返回值各种情况
3、 需求分析
在PHP中,使用return语句可以将返回值传递给调用者,并且return语句后紧跟的返回值可以为变量,常量,数组,或者表达式等。为了帮大家更好的理解函数的返回值,我们设计一个函数没有return,看看其是否有返回值,函数有return但是后面没有数据,看看其是否有返回值,函数中有多个return是否可以。
4、 设计思路(实现原理)
1) 编写一个函数getAge(),让其没有return关键字。
2) 编写一个函数getName(),让其return后面没有数据。
3)编写一个函数getGrade($score),判断传递过来的$score,当其大于60时,返回pass,否则返回fail。
二、案例实现
1、在functions_inc.php文件中,定义getMin($m,$n),代码如下:
function getAge(){ }
function getName(){ }
function getGrade($score){
if($score > 60)
return 'pass'; return 'fail';
2
return;
else
博学谷——让IT教学更简单,让IT学习更有效
}
var_dump(getAge()); echo '
var_dump(getName()); echo '
var_dump(getGrade(75));
运行程序,结果如下图所示:
三、案例总结
1、函数没有return时,也是有返回值的,其值为NULL。
2、函数有return,但是后面没有数据,也是有返回值的,其值为NULL。 3、函数代码中可以有多个return。
4、函数体代码运行到return,那么后面的代码就不会再被执行,函数将结束运行。
案例3-3 函数的参数 一、案例描述
1、 考核知识点
函数的参数
2、 练习目标
? 熟练掌握函数形参和实参的用法
3、 需求分析
定义一个函数concat,不设置此函数的形参,可以接收不定数量字符串参数,将其连接,并返回结果。 4、 设计思路(实现原理)
1)定义一个函数concat(),使用func_get_args()函数接受传递过来的字符串参数,并将其连接,返
回结果。
2)调用函数concat(‘a’,true,-3.56),并将结果输出。
3
博学谷——让IT教学更简单,让IT学习更有效
二、案例实现
1、定义一个函数concat(),代码如下:
//把不定数量的字符串参数连接成一个字符串并返回 function concat() { }
var_dump(concat('a', true, -3.56));
$arr = func_get_args(); //使用数组遍历方法 $str = '';
foreach($arr as $v){ }
return $str;
$str .= $v;
运行程序,结果如下图所示:
三、案例总结
在函数内部,我们可以使用func_get_args()函数以数组的形式接收传递过来的参数。
案例3-4 参数数量 一、案例描述
1、考核知识点
参数数量 2、 练习目标
? 熟练掌握调用函数时实参与形参的数量之间的关系
3、 需求分析
定义一个函数sayHello,设置三个形参,并给一个形参设置默认值,调用此函数并给其相同数量的实参,调用此函数并给其多于形参的实参,调用此函数并给其(不含已有默认值的形参)的实参,调用此函数并不给其实参,观察其结果。
4、 设计思路(实现原理)
4
博学谷——让IT教学更简单,让IT学习更有效
1)定义一个函数sayHello($schoolname,$classname,$linkchar=”LINKCHAR”)。 2)调用sayHello(使用不同数量的实参)。
二、案例实现
1、定义一个函数concat(),代码如下:
function sayHello($schoolname, $classname, $linkchar=\{ }
echo $schoolname, $linkchar, $classname, '
';
2、定义测试数据,代码如下:
sayHello('itcast', 'php0421', ' ');
sayHello('itcast', 'php0421', '===', 'very good.'); sayHello('itcast', 'php0421'); sayHello('itcast');
运行程序,结果如下图所示:
三、案例总结
1、正常情况函数调用使用的实参数量是和函数定义的形参数量是一致的。
2、我们调用的实参如果比形参数量少,未传递的实参对应的形参(且是靠右的)有默认值时,可以省略,不是这种情况,则会出错。
3、调用函数的实参的数量比形参多的话,不会有影响,PHP会把多出的参数忽略掉。
案例3-5 函数中变量的作用域 一、案例描述
1、 考核知识点
函数中变量的作用域
5