一、函数定义及语法:
函数:对一段功能(类似或重复的功能)进行“打包”,然后以上的功能可以反复利用,提升程序实行的效率,这个打包的整体称为函数(function)。方法 method
语法:
function 函数名(){
//语句块
}
调用:
函数名();
<?php
//定义一个函数
function TestFunction(){
}
//调用
TestFunction();
//反复调用
TestFunction();
//在PHP中函数不区分大小写
testFunction();
?>
TIPS:
1、在PHP中函数名不区分大小写,建议区分;
2、函数可以在任何位置定义,建议是在调用前定义。
二、函数和文件引用的关系
单独定义的函数可以以.php、.inc(include,会有安全型隐患,不推举利用)等办法保存,再通过文件引用调用。
可以定义文件名为 xxx.inc.php 方便利用而且专业~0~。
三、带参数的函数
<?php
//带参数的函数
function Test1($t1,$t2){
echo \"大众输入的第一个数:\公众.$t1.\"大众<br>\"大众;
echo \"大众输入的第二个数:\"大众.$t2.\公众<br>\"大众;
echo \"大众和为:\"大众;
echo $t1+$t2;
echo \"大众<br>\"大众;
}
//调用时参数个数、顺序、数据类型都不能随意(要保持同等)
Test1(1,1);
Test1(2,3);
Test1(3,2);
?>
四、带返回值的函数
函数有个运算结果,这个结果可以用于后续的运算,那么这个函数必须要有返回值。
<?php
//带返回值的函数
function Test1($t1,$t2){
return $t1+$t2;
}
echo Test1(3,4);
$result2=Test1(2,3);
echo $result2;
?>
TIPS:
1、一个函数最多只有一个返回值;
2、return后面的语句不可达。
<?php
//带返回值的函数
function Test1($t1,$t2){
if($t1+$t2>0)
return $t1+$t2;
return 0;
}
echo Test1(3,4);
echo Test1(2,3);
echo Test1(2,-3);
?>
五、传值与传地址(在函数中通过参数操作全局变量)
<?php
$t1=1;
function Test($t1){//参数也是局部变量
$t1=2;
echo $t1;
}
echo $t1;
Test($t1);//传值
echo $t1;
function Test1(&$t1){//传地址
$t1=3;
echo $t1;
}
Test1($t1);
echo $t1;
?>
六、变量浸染域(area):也叫生命周期(lifetime),便是变量起浸染的范围。按照变量的浸染域变量可以分为:
局部变量:在对应函数中定义叫做该函数的局部变量,只在函数调用时生效,定义和调用结束都不生效。
全局变量:所有函数之外的变量。
<?php
$t1=1;//全局变量
function Test1(){
$t1=2;
echo \"大众我是test1函数的局部变量$t1\"大众;
}
function Test2(){
echo \公众我是test2函数的局部变量$t1\"大众;
}
echo $t1;//全局变量
Test1();
echo $t1;//全局变量
Test2();
?>
想要在函数中直接操作全局变量,可以利用global声明
<?php
$t1=1;//全局变量
function Test1(){
global $t1;//声明该变量便是全局变量,但是不能赋值
$t1=2;
echo $t1;
}
echo $t1;//全局变量
Test1();
echo $t1;//全局变量
?>
或者通过超全局变量$GLOBALS[“全局变量名修正”]
<?php
$t1=1;//全局变量
function Test1(){
$GLOBALS[\公众t1\"大众]=2;//超全局变量,直接操作全局变量
echo $t1;//局部变量
}
echo $t1;//全局变量
Test1();
echo $t1;//全局变量
?>
TIPS:推举多利用局部变量。避免重复,还能提升效率!
!
!
七、带默认值的函数
在PHP中不得存在同名的函数,希望一个函数功能可以连续扩展
<?php
//带默认值
function Test1($defaulttmp=1){
echo $defaulttmp;
}
//function Test1(){}
Test1();
Test1(2);
?>
在例如:
<?php
//带默认值
function Test1($defaulttmp=1,$tmp){
echo $defaulttmp;
}
//调用
//Test1(,2);//缺点
Test1(3,4);
function Test2($t1,$t2=2){
echo $t1;
}
Test2(1);
//Test2(1,);//缺点
Test2(1,3);
?>
作业:
1、改写乘法口诀表
1)用户输入值小于即是0给出错误提示;
2)用户输入值大于9给出错误提示;
3)用户输入一个整数值,显示乘到该值的结果。
<?php
//实现乘法口诀表 $row显示的行数
function ChengFa($row){
switch(gettype($row)){//获取用户输入值的数据类型
case \公众string\"大众:die(\"大众输入的值是字符串\公众);break;
case \"大众double\"大众:echo \"大众输入的小数\"大众;return;break;
case \"大众boolean\公众:die(\公众输入的是布尔类型\"大众);break;
}
if($row<=0 || $row>9)
{
echo \"大众输入的数值不在合理范围内\"大众;
return;
}
for($i=1;$i<=$row;$i++){
for($j=1;$j<=$i;$j++){
if($row==$i)
echo $j.\"大众\"大众.$i.\"大众=\公众.$j$i.\"大众 \公众;
}
echo \公众<br>\"大众;
}
}
ChengFa(9);
?>
2、数组排序改写
1)输入任何数组都可以完成排序;
2)排序可以掌握升序还是降序;
3)默认为升序。
<?php
$arr=array(5,4,6,7,3,2);
/
Describe:数组排序
Paramters:$arr 须要排序的数组
$isAsc 升序/降序 true为升序,false为降序
默认升序
/
function SortArray($arr,$isAsc=true){
echo \"大众排序前数组:\"大众;
foreach($arr as $v){
echo $v.\"大众 \公众;
}
for($i=0;$i<count($arr);$i++){
for($j=0;$j<count($arr)-1-$i;$j++){
if($isAsc){
//升序
if($arr[$j]>$arr[$j+1]){
$tmp=$arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$tmp;
}
}
elseif(!$isASC){
//降序
if($arr[$j]<$arr[$j+1]){
$tmp=$arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$tmp;
}
}
}
}
echo \"大众<br>排序后数组:\"大众;
foreach($arr as $v){
echo $v.\公众 \"大众;
}
}
SortArray($arr);
SortArray($arr,false);
?>
3、何氏三角改写:
1)输入任何整数显示对应行的结果;
2)小于即是0给出错误提示。
4、人为考勤
1)员工默认基本月人为为1280元
2)满勤奖为30天300元乘以百分比
3)出勤率>=90%~100% 全额发放满勤奖
4)出勤率>=80%~<90% 满勤奖90%发放
5)出勤率70%~80% 满勤奖为50%
6)出勤率低于70% 人为扣款为考勤缺勤比例
7)分别打算“张三”出勤率85%、“李四”出勤率60%的月人为(忽略其他奖金等计酬~0~)。
<?php
function GetMoney($name,$existsper){
$balary=1280;
$base=300;
if($existsper>=0.9)
$base=$base100/100;
elseif($existsper>=0.8 && $existsper<0.9)
$base=$base0.9;
elseif($existsper>=0.7 && $existsper<0.8)
$base=$base0.5;
elseif($existsper<0.7)
$base=-(1-$existsper)$balary;
echo \公众【\公众.$name.\"大众】人为:\公众.($balary+$base).\"大众<br>\"大众;
}
GetMoney(\"大众张三\"大众,0.85);
GetMoney(\"大众李四\"大众,0.6);
?>