工作生活

PHP -- 函数

2019-07-02  本文已影响0人  潘肚饿兵哥哥
<?php

header("Content-type:text/html;charset=utf-8");

/* 如果要输出下面这个*号组成的三角形,就要打这段代码,
写起来太麻烦了,而且写完了之后,改起来也很麻烦.
要重复使用这段代码,就要简化他,把他包起来,
直接调用就有效果,这就要用到函数 
*/


/* 
函数:
  就是一段已命名的具有特定功能的代码块。
  
**************************************************** 
    声明:
    参数不给默认值:
          function 函数名(参数){
              函数体(包裹的部分)
          }
          
    参数给默认值:
    如果参数只有一个数,那就直接写等号后面跟参数,不需要写[];
          function 函数名(参数=[]){
              函数体(包裹的部分)
          }
        
***********************************************************
        
    之所以要有参数是因为:
    调用函数的时候是一整段直接调用的,但是函数里面的值是写死了的,所以就不方便了,
    需要留口子改变函数的参数,以便不同的地方调用可以写入不同的参数
        
*******************************************************
        
    函数命名规则:
     函数名的命名规则和变量类似
     不同的是函数名不区分大小写,变量区分
     
     1.由数字、字母、下划线组成
     2.数字不能开头
     3.不能使用关键字
     4.不区分大小写(定义的时候用驼峰法,调用的时候全部写小写都可以,但是一般不这么做)
     5.由多个单词组成的话用驼峰法或下划线形式组成
     
    调用:
    函数名();
*/

// ***************************************************

/* 
打印五角星:
不定义成函数的时候,要打印五角星就要写这一大段代码:
$row = 5;
for($i=1;$i<=$row;$i++){
    for($m=1;$m<=$row-$i;$m++){
        echo '&nbsp;';
    }
    for($j=1;$j<=2*$i-1;$j++){
        echo '*';
    }
    echo '<br />';
}
 */

// *****************************************************

// 把打印五角星的代码块封成一个函数:

// function 函数名([参数1,参数2...]){
//            函数体(包裹的部分)
//        }



//function 函数名([参数1=[默认值],参数2...]){
//            函数体(包裹的部分)
//        }
//php的函数参数可以写默认值,js的不可以
//写默认值的作用是如果给了实参,那么就以实参为准,
//不给实参,就以形参设定的默认值为准.
//默认参数写在后面,形参写在前面,否则下面给实参的时候,连默认参数都还要再写一遍,否则会报错


//写法:
//function print_star($row=5]){
//            函数体(包裹的部分)
//        }



//star 星星  start 开始


// function print_star(){
//  $row = 5;
//  for($i=1;$i<=$row;$i++){
//      for($m=1;$m<=$row-$i;$m++){
//          echo '&nbsp;';
//      }
//      for($j=1;$j<=2*$i-1;$j++){
//          echo '*';
//      }
//      echo '<br />';
//  }
// }
// 
// print_star();//调用函数
// echo '<h1>123</h1>';
// print_star();

/* 这里调用函数可以打印五角星,但是两次打印出来的都是5层,
就是因为参数已经写死了,
所以要在小括号里写参数,以便不同的地方调用,还可以更改. */

// ***********************************************************

/* 
function print_star($row){
    
    for($i=1;$i<=$row;$i++){
        for($m=1;$m<=$row-$i;$m++){
            echo '&nbsp;';
        }
        for($j=1;$j<=2*$i-1;$j++){
            echo '*';
        }
        echo '<br />';
    }
 }
 
 print_star(3);//调用函数
 echo '<h1>123</h1>';
 print_star(5); 
 
 */

// ***************************************************
//99乘法表:
function print_chengfabiao($width=600,$bgcolor){
echo '<table width="'.$width.'"bgcolor="'.$bgcolor.'">';
echo '<caption>九九乘法表</caption>';
for($i=1; $i<=9; $i++){
    echo'<tr>';
    for($j=1; $j<=$i; $j++){
        echo'<td>', $j,'&times;',$i,'=',$i*$j,'</td>';
    }
    echo '</tr>';
}
echo '</table>';
}
print_chengfabiao($width=600,'skyblue');
//这里的$width=600虽然是默认参数,但是不写会报错,不写会默认只给了一个参数
//如果把默认参数写在后面去,前面放形参的话,那么下面只给一个实参就不会报错
?>

\color{rgba(254, 67, 101, .8)}{给了默认参数,给实参的时候再给一个的话,默认使用实参}

<?php

header("Content-type:text/html;charset=utf-8");

function add($number=100){
    for($i=1, $sum=0; $i<=$number; $i++){
        $sum+=$i;
    }
    echo $sum;
}
add(50);
?>
image.png

函数参数传递的两种方式:
1.值(变量)传递
2.引用传递

第一种:
值传递,返回值也是10;
定义函数只是定义,并没有执行,到下面$a=10;时程序才会执行

function test($a){
        $a = 20;
    }
    
    $a = 10;
    test($a);
    echo $a;//结果是10
image.png

第二种:引用传递
将一个变量通过引用传递给函数,这样该函数就可以修改其参数的值。

<?php
function foo(&$var)
{
    $var++;
}

$a=5;
foo($a);
// $a is 6 here


function foo(&$a)
{
    $a=20;
}

$a=5;
test($a);
echo $a;
这里值是20;
?>

返回值:
如果在一个函数中调用 return 语句,将立即结束此函数的执行并将它的参数作为函数的值返回。

一个函数只能有一个返回值(不是只能设置一个return,而是最终只能接收一个返回值,例如,if里一个return。else里一个return,那也是只有一个返回值)

 function 函数名(参数){
              函数体(包裹的部分)
              return 值;
          }


<?php

header("Content-type:text/html;charset=utf-8");

function add($number=100){
    for($i=1, $sum=0; $i<=$number; $i++){
        $sum+=$i;
    }
    return $sum;
}
$sum = add();
echo '<h1 style="color:red">',$sum,'</h1>';

?>

返回值:


image.png

案例:
在页面中输入一个数字,并计算从1累加到这个数的总和:

<?php

function add($number=100){
    for($i=1, $sum=0; $i<=$number; $i++){
        $sum+=$i;
    }
    return $sum;
}

//$number = isset($_POST['number']);这里的isset()函数用于检测一个变量是否存在,返回值是布尔值
$number = isset($_POST['number'])?$_POST['number']:0;//如果输入数字则将数字赋给$number,否则将0赋给$number
//$number = $_POST['number']; 将html表单里获取到的数字赋给$number
$number = intval($number);//将输入的数字转为整数值,如果输入abc会转为0
$sum = add($number);//这里把接收到的number带入到代码中计算出累加的结果,,然后把数字赋给sum,最后在html里面调用$sum显示这个结果
?>

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title></title>
</head>
<body>
    <form action="" method="post"><!-- 这里默认get,用get表单里填什么都会在url里显示出来 post不会  action=""是要把表单提交给谁-->
        <p>
            输入<input type="text" name="number" />计算累加和
        </p>
        <p><button>计算</button></p>
    </form>
    
    <p>1+2+3...+<?php echo $number; ?>的结果 = <?php echo $sum;?></p>
<!--第一个<?php echo $number; ?>表示要累加到数字几,这个数字是接收的用户输入的数字。-->
    
</body>
</html>

结果:


image.png

上面例子的拓展:
html代码中最下面那段代码其实只要输出结果的p标签就可以了,之所以还要加一个if是因为假如输入的数字是负数的话,他还是会计算,会显示输出的结果是0,这是错的。所以,加了这个if之后,如果是正数就会计算,如果是负数他就不计算

<?php

function add($number=100){
    for($i=1, $sum=0; $i<=$number; $i++){
        $sum+=$i;
    }
    return $sum;
}

//$number = isset($_POST['number']);这里的isset()函数用于检测一个变量是否存在,返回值是布尔值
$number = isset($_POST['number'])?$_POST['number']:0;//如果输入数字则将数字赋给$number,否则将0赋给$number
//$number = $_POST['number']; 将html表单里获取到的数字赋给$number
$number = intval($number);//将输入的数字转为整数值,如果输入abc会转为0
$sum = add($number);//这里把接收到的number带入到代码中计算出累加的结果,,然后把数字赋给sum,最后在html里面调用$sum显示这个结果
?>

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title></title>
</head>
<body>
    <form action="" method="post"><!-- 这里默认get,用get表单里填什么都会在url里显示出来 post不会  action=""是要把表单提交给谁-->
        <p>
            输入<input type="text" name="number" />计算累加和
        </p>
        <p><button>计算</button></p>
    </form>
    
    
    <!-- 下面这段代码其实只要中间的p标签就可以了,之所以还要加一个if是因为假如输入的数字是负数的话,他还是会计算,会显示输出的结果是0,这是错的。所以,加了这个if之后,如果是正数就会计算,如果是负数他就不计算 -->
    
    <?php
    if($number>0){
    ?>
    <p>1+2+3...+<?php echo $number; ?>的结果 = <?php echo $sum;?></p>
    <?php
    }
    ?> 
</body>
</html>


打印等腰三角形:

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title></title>
</head>
<body>
    <form action="" method="post">
//action=""是提交到哪一个文件,如果是本文件,可以不写
//post是以哪一种方式提交,接收的时候同样是以这种方式接收

        <p>
            输入层数:<input type="text" name="row" />
        </p>
        <p><button>打印星星</button></p>
    </form>
    <?php
        function print_star($row = 5){
            for($i=1;$i<=$row;$i++){
                for($m=1;$m<=$row-$i;$m++){
                    echo '&nbsp;';
                }
                for($j=1;$j<=2*$i-1;$j++){
                    echo '*';
                }
                echo '<br />';
            }
        }
        
        $row = isset($_POST['row'])?$_POST['row']:0;
        // 接收用户输入的数字row,如果接收到了,就赋给$row,如果没有接收到数字,就返回0给$row
        $row = intval($row);//intval() 函数用于获取变量的整数值,就是把这个获取到的数转为整数。
//intval() 函数通过使用指定的进制 base 转换(默认是十进制),返回变量 var 的 integer 数值。
        print_star($row);//将接收到的数作为实参传给函数进入循环
    ?>
</body>
</html>
image.png

作业:
计算器:
加法:

<?php
    function counter($num1, $num2,$oper){//operation运算符
        $sum = 0;
        switch($oper){
            case '+':
                $sum = $num1 + $num2;
            break;
        }
        return $sum;
        
        
        /* if($oneNumber && $twoNumber != null){
            if('name="plus"'){
                echo $oneNumber,'+',$twoNumber;
            }
        } */
    }
    
    $num1 = 10;
    $num2 = 5;
    $oper = '+';
    
    $sum = counter($num1,$num2,$oper);//这个$sum不是counter函数里的$sum,而是这个函数的实参叫$sum,虽然看起来是一样的,但是实际上不一样
    echo "{$num1}{$oper}{$num2}={$sum}";
?>
image.png

如果除数是0的情况:


<?php
header("Content-type:text/html;charset=utf-8");

    function counter($num1, $num2,$oper){//operation运算符
        $sum = 0;
        switch($oper){
            case '+':
                $sum = $num1 + $num2;
            break;
            
            case '-':
                $sum = $num1 - $num2;
            break;
            
            case '*':
                $sum = $num1 * $num2;
            break;
            
            
            case '/':
                if($num2 == 0){
                    $sum = '除数不能为0';
                }else{
                    $sum = $num1 / $num2;
                }
            break;
            
            
            default:
                $sum = '操作符有误';//如果输入的不是这四个符号中的一个,就输出这句话
        }
        return $sum;
    }
    
    $num1 = 10;
    $num2 = 0;
    $oper = '/';
    
    $sum = counter($num1,$num2,$oper);//这个$sum不是counter函数里的$sum,而是这个函数的实参叫$sum,虽然看起来是一样的,但是实际上不一样
    
    if(is_numeric($sum)){//is_numeric($sum);判断一个变量是否为数字或数字字符串
        echo "{$num1}{$oper}{$num2}={$sum}";//如果这个$sum是一个数字,就正常计算
    }else{
        echo $sum;//如果$sum不是一个数字,或者是0,就输出一句话
    }
    
?>
image.png

完整的计算器:


<?php
header("Content-type:text/html;charset=utf-8");

    function counter($num1, $num2,$oper){//operation运算符
        $sum = 0;
        switch($oper){
            case '+':
                $sum = $num1 + $num2;
            break;
            
            case '-':
                $sum = $num1 - $num2;
            break;
            
            case '*':
                $sum = $num1 * $num2;
            break;
            
            
            case '/':
                if($num2 == 0){
                    $sum = '除数不能为0';
                }else{
                    $sum = $num1 / $num2;
                }
            break;
            
            
            default:
                $sum = '操作符有误';//如果输入的不是这四个符号中的一个,就输出这句话
        }
        return $sum;
    }
    
    
    // 用户在输入框输入什么这里就接收什么
    // 接收用户输入的数字num1、num2,如果接收到了,就赋给$num,如果没有接收到数字,就返回null给$num,操作符oper也是一样的原理
    $num1 = isset($_POST['num1'])?$_POST['num1']:null;
    $num2 = isset($_POST['num2'])?$_POST['num2']:null;
    $oper = isset($_POST['oper'])?$_POST['oper']:null;
    
    
    
    //isset() 函数用于检测变量是否已设置并且非 NULL。
    //如果已经使用 unset() 释放了一个变量之后,再通过 isset() 判断将返回 FALSE。
    //若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE。
    if(isset($num1) && isset($num2) && isset($oper)){//若数字1,数字2,操作符都存在且不为空,则运算
    
    
    
        $sum = counter($num1,$num2,$oper);//这个$sum不是counter函数里的$sum,而是这个函数的实参叫$sum,虽然看起来是一样的,但是实际上不一样
        if(is_numeric($sum)){//is_numeric($sum);判断一个变量是否为数字或数字字符串
            $result =  "{$num1}{$oper}{$num2}={$sum}";//如果这个$sum是一个数字,就正常计算
        }else{
            $result = $sum;//如果$sum不是一个数字,或者是0,就输出一句话
        }
    }   
?>



<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title></title>
</head>
<body>
    <form action="" method="post">
        <p>输入第一个数:<input type="text" name = "num1"></p>
        <p>输入第二个数:<input type="text" name = "num2"></p>
        <p>
            <input type="radio" name = "oper" value = "+" checked/>+<!--checked  默认选中此选项-->
            <input type="radio" name = "oper" value = "-" />-
            <input type="radio" name = "oper" value = "*" />&times;
            <input type="radio" name = "oper" value = "/" />&divide;
        </p>
        
        <p><button>计算:</button></p>
    </form>
    
    
    <!-- 在这里输出计算的结果: -->
    <h3>
        <?php
            if(isset($result)){
                echo $result;
            }
        ?>
    </h3>
</body>
</html>
image.png

打印几种图形:

<?php 
#打印直角三角形
     function print_star1($row = 5){
        for($i=1;$i<=$row;$i++){
            for($j=1;$j<=2*$i-1;$j++){
                echo '*';
            }
            echo '<br />';
        }
    }


#打印等腰三角形
    function print_star2($row = 5){
        for($i=1;$i<=$row;$i++){
            for($m=1;$m<=$row-$i;$m++){
                echo '&nbsp;';
            }
            for($j=1;$j<=2*$i-1;$j++){
                echo '*';
            }
            echo '<br />';
        }
    }

#打印空心三角形
    function print_star3($row = 5){
        for($i=1; $i<=$row; $i++){//输出的每一行
            for($m=1; $m<=$row-$i; $m++){//每一行的空格数
                echo '&nbsp;';
            }
            for($j=1; $j<=(2*$i-1); $j++){//每一行的星号个数
                if($i==1 || $i==$row){//如果是第一行和最后一行全打印
                    echo '*';
                }else{
                    if($j==1 || $j==2*$i-1){//第一个*和最后一个*打印
                        echo '*';
                    }else{//其他时候打印空格
                        echo '&nbsp;';
                    }
                }
            }
            echo '<br/>';
        }
    }


#打印菱形
function print_star4($row = 5){
    $top_row = $row-1;
    for($i=1;$i<=$top_row;$i++){
        for($m=1;$m<=$row-$i;$m++){
            echo '&nbsp;';
        }
        for($j=1;$j<=2*$i-1;$j++){
            echo '*';
        }
        echo '<br />';
    }
    for($i=$row;$i>=1;$i--){
        for($m=1;$m<=$row-$i;$m++){
            echo '&nbsp;';
        }
        for($j=1;$j<=2*$i-1;$j++){
            echo '*';
        }
        echo '<br />';
    }
}
?>


<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title></title>
</head>
<body>
    <form action="" method="get">
        <p>
            请输入层数:<input type="text" name = "row" />
        </p>
        
        <p>
            请选择图形:
            <select name = "style">
                <option value="1">直角三角形</option>
                <option value="2">等腰三角形</option>
                <option value="3">空心三角形</option>
                <option value="4">菱形</option>
            </select>
        </p>
        
        <p><button>打印图形</button></p>
    </form>
    
    <?php 
    //接收html的数据:用户输入的层数 和 选择的图形
        $row = isset($_GET['row'])?$_GET['row']:null;
        $style = isset($_GET['style'])?$_GET['style']:null;
        
        
        //isset()用于检测变量是否已设置并且非NULL,就是检查是否接收到数据
        if(isset($row) && isset($style)){
            // switch($style){
            //  case 1: print_star1($row); break;
            //  case 2: print_star2($row); break;
            //  case 3: print_star3($row); break;
            //  case 4: print_star4($row); break;
            // } 
            //注释掉的这段代码和下面的两行代码功能一样
            //case1 就对应style1,其他三个也一样
            //
            
            $fun_name = 'print_star'.$style;
            $fun_name($row);
        }
    ?>
</body>
</html>
image.png
上一篇 下一篇

猜你喜欢

热点阅读