<?php
header("Content-type:text/html;charset=utf-8");
/* 如果要輸出下面這個(gè)*號(hào)組成的三角形,就要打這段代碼,
寫(xiě)起來(lái)太麻煩了,而且寫(xiě)完了之后,改起來(lái)也很麻煩.
要重復(fù)使用這段代碼,就要簡(jiǎn)化他,把他包起來(lái),
直接調(diào)用就有效果,這就要用到函數(shù)
*/
/*
函數(shù):
就是一段已命名的具有特定功能的代碼塊周循。
****************************************************
聲明:
參數(shù)不給默認(rèn)值:
function 函數(shù)名(參數(shù)){
函數(shù)體(包裹的部分)
}
參數(shù)給默認(rèn)值:
如果參數(shù)只有一個(gè)數(shù),那就直接寫(xiě)等號(hào)后面跟參數(shù)灌危,不需要寫(xiě)[]制肮;
function 函數(shù)名(參數(shù)=[]){
函數(shù)體(包裹的部分)
}
***********************************************************
之所以要有參數(shù)是因?yàn)椋? 調(diào)用函數(shù)的時(shí)候是一整段直接調(diào)用的冒窍,但是函數(shù)里面的值是寫(xiě)死了的,所以就不方便了豺鼻,
需要留口子改變函數(shù)的參數(shù)综液,以便不同的地方調(diào)用可以寫(xiě)入不同的參數(shù)
*******************************************************
函數(shù)命名規(guī)則:
函數(shù)名的命名規(guī)則和變量類(lèi)似
不同的是函數(shù)名不區(qū)分大小寫(xiě),變量區(qū)分
1.由數(shù)字儒飒、字母意乓、下劃線組成
2.數(shù)字不能開(kāi)頭
3.不能使用關(guān)鍵字
4.不區(qū)分大小寫(xiě)(定義的時(shí)候用駝峰法,調(diào)用的時(shí)候全部寫(xiě)小寫(xiě)都可以,但是一般不這么做)
5.由多個(gè)單詞組成的話用駝峰法或下劃線形式組成
調(diào)用:
函數(shù)名();
*/
// ***************************************************
/*
打印五角星:
不定義成函數(shù)的時(shí)候届良,要打印五角星就要寫(xiě)這一大段代碼:
$row = 5;
for($i=1;$i<=$row;$i++){
for($m=1;$m<=$row-$i;$m++){
echo ' ';
}
for($j=1;$j<=2*$i-1;$j++){
echo '*';
}
echo '<br />';
}
*/
// *****************************************************
// 把打印五角星的代碼塊封成一個(gè)函數(shù):
// function 函數(shù)名([參數(shù)1笆凌,參數(shù)2...]){
// 函數(shù)體(包裹的部分)
// }
//function 函數(shù)名([參數(shù)1=[默認(rèn)值],參數(shù)2...]){
// 函數(shù)體(包裹的部分)
// }
//php的函數(shù)參數(shù)可以寫(xiě)默認(rèn)值,js的不可以
//寫(xiě)默認(rèn)值的作用是如果給了實(shí)參,那么就以實(shí)參為準(zhǔn),
//不給實(shí)參,就以形參設(shè)定的默認(rèn)值為準(zhǔn).
//默認(rèn)參數(shù)寫(xiě)在后面,形參寫(xiě)在前面,否則下面給實(shí)參的時(shí)候,連默認(rèn)參數(shù)都還要再寫(xiě)一遍,否則會(huì)報(bào)錯(cuò)
//寫(xiě)法:
//function print_star($row=5]){
// 函數(shù)體(包裹的部分)
// }
//star 星星 start 開(kāi)始
// function print_star(){
// $row = 5;
// for($i=1;$i<=$row;$i++){
// for($m=1;$m<=$row-$i;$m++){
// echo ' ';
// }
// for($j=1;$j<=2*$i-1;$j++){
// echo '*';
// }
// echo '<br />';
// }
// }
//
// print_star();//調(diào)用函數(shù)
// echo '<h1>123</h1>';
// print_star();
/* 這里調(diào)用函數(shù)可以打印五角星,但是兩次打印出來(lái)的都是5層,
就是因?yàn)閰?shù)已經(jīng)寫(xiě)死了,
所以要在小括號(hào)里寫(xiě)參數(shù),以便不同的地方調(diào)用,還可以更改. */
// ***********************************************************
/*
function print_star($row){
for($i=1;$i<=$row;$i++){
for($m=1;$m<=$row-$i;$m++){
echo ' ';
}
for($j=1;$j<=2*$i-1;$j++){
echo '*';
}
echo '<br />';
}
}
print_star(3);//調(diào)用函數(shù)
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,'×',$i,'=',$i*$j,'</td>';
}
echo '</tr>';
}
echo '</table>';
}
print_chengfabiao($width=600,'skyblue');
//這里的$width=600雖然是默認(rèn)參數(shù),但是不寫(xiě)會(huì)報(bào)錯(cuò),不寫(xiě)會(huì)默認(rèn)只給了一個(gè)參數(shù)
//如果把默認(rèn)參數(shù)寫(xiě)在后面去,前面放形參的話,那么下面只給一個(gè)實(shí)參就不會(huì)報(bào)錯(cuò)
?>
<?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);
?>
函數(shù)參數(shù)傳遞的兩種方式:
1.值(變量)傳遞
2.引用傳遞
第一種:
值傳遞,返回值也是10慢显;
定義函數(shù)只是定義爪模,并沒(méi)有執(zhí)行,到下面$a=10荚藻;時(shí)程序才會(huì)執(zhí)行
function test($a){
$a = 20;
}
$a = 10;
test($a);
echo $a;//結(jié)果是10
第二種:引用傳遞
將一個(gè)變量通過(guò)引用傳遞給函數(shù)屋灌,這樣該函數(shù)就可以修改其參數(shù)的值。
<?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应狱;
?>
返回值:
如果在一個(gè)函數(shù)中調(diào)用 return 語(yǔ)句共郭,將立即結(jié)束此函數(shù)的執(zhí)行并將它的參數(shù)作為函數(shù)的值返回。
一個(gè)函數(shù)只能有一個(gè)返回值(不是只能設(shè)置一個(gè)return疾呻,而是最終只能接收一個(gè)返回值除嘹,例如,if里一個(gè)return岸蜗。else里一個(gè)return尉咕,那也是只有一個(gè)返回值)
function 函數(shù)名(參數(shù)){
函數(shù)體(包裹的部分)
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>';
?>
返回值:
案例:
在頁(yè)面中輸入一個(gè)數(shù)字璃岳,并計(jì)算從1累加到這個(gè)數(shù)的總和:
<?php
function add($number=100){
for($i=1, $sum=0; $i<=$number; $i++){
$sum+=$i;
}
return $sum;
}
//$number = isset($_POST['number']);這里的isset()函數(shù)用于檢測(cè)一個(gè)變量是否存在,返回值是布爾值
$number = isset($_POST['number'])?$_POST['number']:0;//如果輸入數(shù)字則將數(shù)字賦給$number,否則將0賦給$number
//$number = $_POST['number']; 將html表單里獲取到的數(shù)字賦給$number
$number = intval($number);//將輸入的數(shù)字轉(zhuǎn)為整數(shù)值,如果輸入abc會(huì)轉(zhuǎn)為0
$sum = add($number);//這里把接收到的number帶入到代碼中計(jì)算出累加的結(jié)果年缎,,然后把數(shù)字賦給sum,最后在html里面調(diào)用$sum顯示這個(gè)結(jié)果
?>
<!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"><!-- 這里默認(rèn)get,用get表單里填什么都會(huì)在url里顯示出來(lái) post不會(huì) action=""是要把表單提交給誰(shuí)-->
<p>
輸入<input type="text" name="number" />計(jì)算累加和
</p>
<p><button>計(jì)算</button></p>
</form>
<p>1+2+3...+<?php echo $number; ?>的結(jié)果 = <?php echo $sum;?></p>
<!--第一個(gè)<?php echo $number; ?>表示要累加到數(shù)字幾铃慷,這個(gè)數(shù)字是接收的用戶(hù)輸入的數(shù)字单芜。-->
</body>
</html>
結(jié)果:
上面例子的拓展:
html代碼中最下面那段代碼其實(shí)只要輸出結(jié)果的p標(biāo)簽就可以了,之所以還要加一個(gè)if是因?yàn)榧偃巛斎氲臄?shù)字是負(fù)數(shù)的話枚冗,他還是會(huì)計(jì)算缓溅,會(huì)顯示輸出的結(jié)果是0蛇损,這是錯(cuò)的赁温。所以,加了這個(gè)if之后淤齐,如果是正數(shù)就會(huì)計(jì)算股囊,如果是負(fù)數(shù)他就不計(jì)算
<?php
function add($number=100){
for($i=1, $sum=0; $i<=$number; $i++){
$sum+=$i;
}
return $sum;
}
//$number = isset($_POST['number']);這里的isset()函數(shù)用于檢測(cè)一個(gè)變量是否存在,返回值是布爾值
$number = isset($_POST['number'])?$_POST['number']:0;//如果輸入數(shù)字則將數(shù)字賦給$number,否則將0賦給$number
//$number = $_POST['number']; 將html表單里獲取到的數(shù)字賦給$number
$number = intval($number);//將輸入的數(shù)字轉(zhuǎn)為整數(shù)值,如果輸入abc會(huì)轉(zhuǎn)為0
$sum = add($number);//這里把接收到的number帶入到代碼中計(jì)算出累加的結(jié)果,,然后把數(shù)字賦給sum,最后在html里面調(diào)用$sum顯示這個(gè)結(jié)果
?>
<!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"><!-- 這里默認(rèn)get更啄,用get表單里填什么都會(huì)在url里顯示出來(lái) post不會(huì) action=""是要把表單提交給誰(shuí)-->
<p>
輸入<input type="text" name="number" />計(jì)算累加和
</p>
<p><button>計(jì)算</button></p>
</form>
<!-- 下面這段代碼其實(shí)只要中間的p標(biāo)簽就可以了稚疹,之所以還要加一個(gè)if是因?yàn)榧偃巛斎氲臄?shù)字是負(fù)數(shù)的話,他還是會(huì)計(jì)算祭务,會(huì)顯示輸出的結(jié)果是0内狗,這是錯(cuò)的怪嫌。所以,加了這個(gè)if之后柳沙,如果是正數(shù)就會(huì)計(jì)算岩灭,如果是負(fù)數(shù)他就不計(jì)算 -->
<?php
if($number>0){
?>
<p>1+2+3...+<?php echo $number; ?>的結(jié)果 = <?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=""是提交到哪一個(gè)文件,如果是本文件赂鲤,可以不寫(xiě)
//post是以哪一種方式提交噪径,接收的時(shí)候同樣是以這種方式接收
<p>
輸入層數(shù):<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 ' ';
}
for($j=1;$j<=2*$i-1;$j++){
echo '*';
}
echo '<br />';
}
}
$row = isset($_POST['row'])?$_POST['row']:0;
// 接收用戶(hù)輸入的數(shù)字row,如果接收到了,就賦給$row,如果沒(méi)有接收到數(shù)字,就返回0給$row
$row = intval($row);//intval() 函數(shù)用于獲取變量的整數(shù)值,就是把這個(gè)獲取到的數(shù)轉(zhuǎn)為整數(shù)。
//intval() 函數(shù)通過(guò)使用指定的進(jìn)制 base 轉(zhuǎn)換(默認(rèn)是十進(jìn)制)数初,返回變量 var 的 integer 數(shù)值找爱。
print_star($row);//將接收到的數(shù)作為實(shí)參傳給函數(shù)進(jìn)入循環(huán)
?>
</body>
</html>
作業(yè):
計(jì)算器:
加法:
<?php
function counter($num1, $num2,$oper){//operation運(yùn)算符
$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);//這個(gè)$sum不是counter函數(shù)里的$sum,而是這個(gè)函數(shù)的實(shí)參叫$sum,雖然看起來(lái)是一樣的,但是實(shí)際上不一樣
echo "{$num1}{$oper}{$num2}={$sum}";
?>
如果除數(shù)是0的情況:
<?php
header("Content-type:text/html;charset=utf-8");
function counter($num1, $num2,$oper){//operation運(yùn)算符
$sum = 0;
switch($oper){
case '+':
$sum = $num1 + $num2;
break;
case '-':
$sum = $num1 - $num2;
break;
case '*':
$sum = $num1 * $num2;
break;
case '/':
if($num2 == 0){
$sum = '除數(shù)不能為0';
}else{
$sum = $num1 / $num2;
}
break;
default:
$sum = '操作符有誤';//如果輸入的不是這四個(gè)符號(hào)中的一個(gè),就輸出這句話
}
return $sum;
}
$num1 = 10;
$num2 = 0;
$oper = '/';
$sum = counter($num1,$num2,$oper);//這個(gè)$sum不是counter函數(shù)里的$sum,而是這個(gè)函數(shù)的實(shí)參叫$sum,雖然看起來(lái)是一樣的,但是實(shí)際上不一樣
if(is_numeric($sum)){//is_numeric($sum);判斷一個(gè)變量是否為數(shù)字或數(shù)字字符串
echo "{$num1}{$oper}{$num2}={$sum}";//如果這個(gè)$sum是一個(gè)數(shù)字,就正常計(jì)算
}else{
echo $sum;//如果$sum不是一個(gè)數(shù)字,或者是0,就輸出一句話
}
?>
完整的計(jì)算器:
<?php
header("Content-type:text/html;charset=utf-8");
function counter($num1, $num2,$oper){//operation運(yùn)算符
$sum = 0;
switch($oper){
case '+':
$sum = $num1 + $num2;
break;
case '-':
$sum = $num1 - $num2;
break;
case '*':
$sum = $num1 * $num2;
break;
case '/':
if($num2 == 0){
$sum = '除數(shù)不能為0';
}else{
$sum = $num1 / $num2;
}
break;
default:
$sum = '操作符有誤';//如果輸入的不是這四個(gè)符號(hào)中的一個(gè),就輸出這句話
}
return $sum;
}
// 用戶(hù)在輸入框輸入什么這里就接收什么
// 接收用戶(hù)輸入的數(shù)字num1、num2,如果接收到了,就賦給$num,如果沒(méi)有接收到數(shù)字,就返回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() 函數(shù)用于檢測(cè)變量是否已設(shè)置并且非 NULL泡孩。
//如果已經(jīng)使用 unset() 釋放了一個(gè)變量之后车摄,再通過(guò) isset() 判斷將返回 FALSE。
//若使用 isset() 測(cè)試一個(gè)被設(shè)置成 NULL 的變量珍德,將返回 FALSE练般。
if(isset($num1) && isset($num2) && isset($oper)){//若數(shù)字1,數(shù)字2,操作符都存在且不為空,則運(yùn)算
$sum = counter($num1,$num2,$oper);//這個(gè)$sum不是counter函數(shù)里的$sum,而是這個(gè)函數(shù)的實(shí)參叫$sum,雖然看起來(lái)是一樣的,但是實(shí)際上不一樣
if(is_numeric($sum)){//is_numeric($sum);判斷一個(gè)變量是否為數(shù)字或數(shù)字字符串
$result = "{$num1}{$oper}{$num2}={$sum}";//如果這個(gè)$sum是一個(gè)數(shù)字,就正常計(jì)算
}else{
$result = $sum;//如果$sum不是一個(gè)數(shù)字,或者是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>輸入第一個(gè)數(shù):<input type="text" name = "num1"></p>
<p>輸入第二個(gè)數(shù):<input type="text" name = "num2"></p>
<p>
<input type="radio" name = "oper" value = "+" checked/>+<!--checked 默認(rèn)選中此選項(xiàng)-->
<input type="radio" name = "oper" value = "-" />-
<input type="radio" name = "oper" value = "*" />×
<input type="radio" name = "oper" value = "/" />÷
</p>
<p><button>計(jì)算:</button></p>
</form>
<!-- 在這里輸出計(jì)算的結(jié)果: -->
<h3>
<?php
if(isset($result)){
echo $result;
}
?>
</h3>
</body>
</html>
打印幾種圖形:
<?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 ' ';
}
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++){//每一行的空格數(shù)
echo ' ';
}
for($j=1; $j<=(2*$i-1); $j++){//每一行的星號(hào)個(gè)數(shù)
if($i==1 || $i==$row){//如果是第一行和最后一行全打印
echo '*';
}else{
if($j==1 || $j==2*$i-1){//第一個(gè)*和最后一個(gè)*打印
echo '*';
}else{//其他時(shí)候打印空格
echo ' ';
}
}
}
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 ' ';
}
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 ' ';
}
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>
請(qǐng)輸入層數(shù):<input type="text" name = "row" />
</p>
<p>
請(qǐng)選擇圖形:
<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的數(shù)據(jù):用戶(hù)輸入的層數(shù) 和 選擇的圖形
$row = isset($_GET['row'])?$_GET['row']:null;
$style = isset($_GET['style'])?$_GET['style']:null;
//isset()用于檢測(cè)變量是否已設(shè)置并且非NULL,就是檢查是否接收到數(shù)據(jù)
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 就對(duì)應(yīng)style1,其他三個(gè)也一樣
//
$fun_name = 'print_star'.$style;
$fun_name($row);
}
?>
</body>
</html>