PHP基础加强(第七天)

来源:互联网 发布:有了网站源码怎么安装 编辑:程序博客网 时间:2024/04/27 23:28

1、函数概念引入

<?php/*假设如下场景:来客人了,需要安排书童,沏茶书童比较笨,需要你把步骤说的特别细*/// 于是当客人1来的时候echo '把水灌进水壶,烧开,<br />';echo '把茶叶放到茶杯,<br />';echo '往茶杯冲开水<br />';echo '端上茶杯<br />';// 第二天,又来客人// 只好再对书童大喊4声echo '把水灌进水壶,烧开,<br />';echo '把茶叶放到茶杯,<br />';echo '往茶杯冲开水<br />';echo '端上茶杯<br />';// 第三天...  又来客人....// 第四天... 又来客人// 我们思考: 当客人来的时候,把"沏茶"这个过程执行一遍.// 这样对书童说: 客人来的时候,把"那个过程整体执行一遍?"// 书童的疑问: 哪个过程? 什么样的过程?// 教书童沏茶// 看好了, 我把这4句话,写在一块{    echo '把水灌进水壶,烧开,<br />';    echo '把茶叶放到茶杯,<br />';    echo '往茶杯冲开水<br />';    echo '端上茶杯<br />';} // 包成一个复合语句,一大句话.// 再给这个复合语句,加上个名字,就是函数名function qicha() {    echo '把水灌进水壶,烧开,<br />';    echo '把茶叶放到茶杯,<br />';    echo '往茶杯冲开水<br />';    echo '端上茶杯<br />';} // 此时,复合语句已经有一个名字了.echo '<hr />';qicha();// 这是最简单的函数/*是从编程的角度来理解的.从编程角度看,把若干语句,封装在一块,起一个名字.下次根据名字来调用这个封装的块,就可以称之为函数.*/?>

2、从数学的角度来理解函数

<?php/*从数学的角度来理解函数的概念: 函数是变量之间的关系.例: y = 2*x;当:x=1, 则y=2当:x=3, 则y=6......可以看出,y 与 x之间存储一种关系.返回的y是根据x的值乘以2.*//*问男生:你谈过几个女朋友?男生的真实谈过的女朋友 == 他说的个数/3女生的真实谈过的男朋友 == 她说的个数*3来一个男友个数推测机$real = $say * 3;给我一个数,我帮你算出一个3倍后的数---这样一个量与量的关系.给函数一个值,函数乘以3,再还给我此时的函数,像不像 豆浆机?入口处输入: 黄豆机器内: 搅拌黄豆出口: 豆浆*/function she($say) { // 参数是入口    $real = $say * 3; // 函数体是加工处      return $real;   // 出口}$num = 5;echo '大S说她谈过',$num,'次恋爱<br />';echo '推测其真实谈过',she($num),'次恋爱';?>

3、函数的声明语法

<?php/***函数的声明的语法最简单的函数声明function foo() { //没有参数}也可以带有参数function foo($arg1,$arg2,$arg3) { // 可以有1个或N个参数    return 值;// 可以return 值,也可以不return}/***函数就是一个加工机输入黄豆,加工,return 豆浆输入苹果,加工,return 罐头输入淑女,加工,return 辣妹***//***函数的调用?函数以其名称来调用***/function foo() {    echo 'foo';}foo();echo '<br />';// 如果函数指定的参数的话.// 还需要传参数function bar($num) {    echo $num * 10;}// bar(); // 出错,缺少参数bar(9);/***至此,我们先讨论清函数概念函数声明语法函数调用方法接下来,讨论深入的东西函数的命名规范函数的参数个数与默认参数函数的传参方式 函数参数的作用域[2012年9月25日晚,讲到此]函数的返回值函数的执行权与交回动态函数***/?>

4、函数的命名规范

<?php// 函数的命名规范// 和变量一样,以字母数字下划线组合而成,但数字不能开头.// 但是 不区分大小写// 以后学到的面向对象时, 方法(理解成函数),也不区分大小写.function foo() {    echo 'foo';} FOO(); // 函数的名字,不区分大小写的?>

5、函数的传参

<?php/**小学时:长方形面积 = 长 * 高, (长城高?)初中时: s = a * b高中时: s = α * β来分析 这3个公式, 变的是什么,不变的是什么?用来表示矩形的2个边的"名称"变了,叫"长宽",叫"a b",叫"α β"不变的是"关系", 即无论方式来说明,面积都始终等于长*宽.假设,碰到一个英国小孩,不会中文.他脑子中 s = a * b你是中国人,你想让他帮你算面积的话,你告诉他 长 宽,没用.要把你的长 宽,让英国小孩脑子中,知道你在说的是 a b的值才行.**/function 面积($长,$宽) {    return $长 * $宽;}echo 面积(10,8);/***上面的过程,参数是如何传过去的?答: 面积函数开始调用,在函数内部,声明2个变量, $长,$宽; // 形参把接收到的值,按顺序分别赋给形参此时,形参已经有值了.函数体执行.最后 返回.***/// 看下面这个例子function she($say) { // 参数是入口    $real = $say * 3; // 函数体是加工处      return $real;   // 出口}$num = 5;echo '大S说她谈过',$num,'次恋爱<br />';echo '推测其真实谈过',she($num),'次恋爱';/***she函数调用传参$num,真正用的是什么?答:用的是$num的值.函数先在函数体体内声明, $say变量,再把 $num的值  赋给 $say执行,返回模拟执行如下she($num);she($say) {         $say = $num;    $real = $say * 3; // 函数体是加工处      return $real;   // 出口}***//***声明函数时,的参数---> 叫形式上的参数, 形参调用函数时,的参数---> 叫实际传递的参数,实参.说白了: 形参在函数体内提供?? -->变量名实参在函数体内提供?? -->值***/?>

6、函数中对形参的理解

<?php// 考考你,对形参,实参理解了没有?function foo($num) {    $num +=1;    $num *=2;    $num /= 3;    $num +=999;    return $num;}$price = 100;echo foo($price),'<br />';echo $price;// 因为,在函数运行,$price的(值) 传递给 $num// 因此,函数体内的$num,无论怎么变,和$price无关了.?>

7、形参与实参的个数和顺序关系

<?php// 形参与实参的顺序/个数的关系.// 实参的值,要赋给形参变量function foo($x,$y,$z) {    return 2*$x + 3*$y + $z;}echo foo(1,2,3),'<br />';// 在调用的过程中,// 实参,形参,从左到右,严格的逐一对应.[对号入座]// 一一对应上,然后实参值,挨个儿赋给形参./****如果实参少于形参,没对应上****/// echo foo(1,2); // warning警告,并尽量往下执行./****如果实参多于形参,****/echo foo(1,2,3,4,5,6,7),'<br />'; // 还是11// 因为实参对号给形参赋值时, 后面多出来的实参,将会被舍弃掉. 没有其他副作用.?>

8、函数的默认参数

<?php// 参数默认值// 来人,报国籍.// 要是指明自己是某国人,即说我来自某国// 不指明,就默认为"中国"function intro($country='中国') {    echo '我来自',$country,'<br />';}intro();/**intro($country='中国') {    $country='中国';    echo '我来自',$country,'<br />';}**/intro('美国');/*intro($country='中国') {    $country='中国';    $country='美国';    echo '我来自',$country,'<br />';}*/intro('日本');/*intro($country='中国') {    $country='中国';    $country='日本';    echo '我来自',$country,'<br />';}*//*****默认参数,并不能改变 实参与形参 严格按顺序赋值的原则.*****/function sum($x=4,$y,$z) {    return 2*$x + 3 * $y + $z;}// sum(5,6); // 行吗?/*5--->$x6--->$y没有值--->$zsum($x=4,$y,$z) {    $x = 4;    $x = 5;    $y = 6;    // z 没有接到值.       return 2*$x + 3 * $y + $z;}*/// 想一想,既然有了默认参数,调用时,又没能少传实参?// 想一想,怎么样才能少传一个实参,利用上默认参数?// 番茄回答, 把','把第一个参数空出来 (点评:高,实在是高)// sum(,5,6); // 行不通,语法错误// 如果参数有默认值的话,要把该参数,写到最后面// 见09.php?>

9、函数中的参数与默认值

<?php// 函数参数与默认值function sum($x,$y=3,$z=4) {    return $x + 2*$y + 3*$z;}echo sum(1),'<br />';/**sum($x,$y=3,$z=4) {    $x = null;    $y = 3;    $z = 4;  // 这3行,是函数声明引起的        $x = 1;  // 这1行,是函数调用,传实参引起的.    return $x + 2*$y + 3*$z;}**/echo sum(1,2);  // 17/**sum($x,$y=3,$z=4) {    $x = null;    $y = 3;    $z = 4;  // 这3行,是函数声明引起的        $x = 1;    $y = 2;   // 这2行,是函数调用,传实参引起的.    return $x + 2*$y + 3*$z;}**//***函数可以设置默认值.有默认值参数一般后面.如果某个有默认值的形参,对应位置传了实参那么,实参的值 将要覆盖 默认值.***/?>

10、函数中变量的作用域

<?php// 函数参数与默认值function sum($x,$y=3,$z=4) {    return $x + 2*$y + 3*$z;}echo sum(1),'<br />';/**sum($x,$y=3,$z=4) {    $x = null;    $y = 3;    $z = 4;  // 这3行,是函数声明引起的        $x = 1;  // 这1行,是函数调用,传实参引起的.    return $x + 2*$y + 3*$z;}**/echo sum(1,2);  // 17/**sum($x,$y=3,$z=4) {    $x = null;    $y = 3;    $z = 4;  // 这3行,是函数声明引起的        $x = 1;    $y = 2;   // 这2行,是函数调用,传实参引起的.    return $x + 2*$y + 3*$z;}**//***函数可以设置默认值.有默认值参数一般后面.如果某个有默认值的形参,对应位置传了实参那么,实参的值 将要覆盖 默认值.***/?>

11、js中函数的作用域主要是与php中的对比

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN"><head><title>新建网页</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta name="description" content="" /><meta name="keywords" content="" /><script type="text/javascript">var num = 5;function t() {    alert(num);}t(); // 在js中,有作用域链的概念,在函数内找不到局部变量num,就会往外层寻找.// 在PHP中,则不会跑到外层去寻找.</script><style type="text/css"></style></head>    <body>    </body></html>

12、函数实例

<?php// 小小计算器,只计算+ - * /function calc($num1,$act,$num2) {    $res = null;        switch ($act) {        case '+' :            $res = $num1 + $num2;            break;                case '-':            $res = $num1 - $num2;            break;        case '*':            $res = $num1 * $num2;            break;        case '/':            if($num2 == 0) {                echo '0不能作除数';                break;            }            $res = $num1/$num2;            break;            }        return $res;}echo calc(3,'+',2),'<br />';echo calc(3,'*',7),'<br />';echo calc(3,'/',0),'<br />';?>



0 0
原创粉丝点击