php--关于函数(3)常用类型

本章参考《php从入门到提高》及LAMP兄弟连有关内容总结如下

<?php
//常规函数
function ordinary1($x,$y){//得到一个返回值
return $x+$y;
}
function ordinary2(){//执行一个过程
echo '<table border=1 width="800" align="center">';
echo '<caption><h1>表名</h1></caption>';
for($i=0; $i<3; $i++){
if($i%2==0)
$bg="#ffffff";
else
$bg="#cccccc";
echo '<tr bgColor="'.$bg.'">';
for($j=0; $j<10;$j++ ){
echo '<td>'.(10*$i+$j).'</td>';
}
echo '</tr>';
}
echo '</table>';
}
echo "<pre>*************以下是函数调用********************</pre>";

echo "ordinary1=".ordinary1(3,4);
ordinary2();
echo "<pre>*************以上是函数调用********************</pre>";


//引用赋值函数referencingFunction
function referencingFunction(&$m){
$m=5*$m+10;
echo "在函数referencingFunction内:\$m=".$m."<br>";
}
function ordFunction($m){
$m=5*$m+10;
echo "在函数ordFunction内:\$m=".$m."<br>";
}
echo "<pre>###########调用引用和非引用函数#########</pre>";
$n=1;$m=1;
referencingFunction($n);
echo "<p>在函数referencingFunction外:\$n=$n</p>";
ordFunction($m);
echo "<p>在函数referencingFunction外:\$m=$m</p>";
echo "<pre>###########对比引用与非引用函数的区别#########</pre>";


//默认值函数,默认值一般放在参数列表最后,调用函数时默认值可有可没有
function sum($a,$b=10){
return $a+$b;
}
echo "<pre>###########默认函数调用#########</pre>";
echo "函数sum=".sum(10)."<br>";
echo "函数sum=".sum(10,100)."<br>";
echo "<pre>###########默认函数#########</pre>";


/*变量函数,如果一个变量后面有括号$var=hello $var(), 就将寻找与变量值同名的函数 hello()*/
function one($a){
return $a*$a;
}
function two($a,$b){
return $a*$a+$b*$b;
}
function three($a,$b,$c){
return ($a*$a+$b*$b+$c*$c);
}
echo "@@@@@@@@@@以下是变量函数调用@@@@@@@@@@<br>";
$a=3;$b=4;$c=5;
$var="one";
/*$var="two"; $var="three";若此处把这条语句加上,会出现警告,但输出结果正常,是不是说明多变量函数只给一个赋值,其它的就会自动寻找?*/
echo "结果:one=".$var($a)."<br>";
echo "结果:two=".$var($a,$b)."<br>";
echo "结果:three=".$var($a,$b,$c)."<br>";
echo "对于有返回值的也可以用第二种写形式,如下:<br>";
echo "结果:one=".$var($a)."<br>";
$var="two";
echo "结果:two=".$var($a,$b)."<br>";
$var="three";
echo "结果:three=".$var($a,$b,$c)."<br>";
echo "@@@@@@以上是变量函数调用@@@@@@@@@<br>";
function come(){
echo "来了<br>";
}
function go($name){
echo "$name"."走了<br>";
}
function back($string,$time){
echo "$string"."在"."$time"."时回来了<br>";
}
$func="come"; //这种采用的是单独赋值,单独输出的形式,姑且叫第二种形式
$func();
$func="go";
$func("小明");
$func="back"; //如果此处不加这条语句,则得不到我们想要的结果,也即back()函数没有被赋值
$func("小芳","12:30");
echo "变量函数总结:最好采用第二种书写形式,即用到某个函数就赋值给某个变量,不论执行有返回值的还是执行过程,都不会报错<br>";

 

//对函数的引用,其实就是对返回结果的引用
function &example($tmp){
return $tmp;
}
$str=&example("下雪了");/*对参数的引用,只是在声明函数时对形参加上引用标志
&,函数调用时不需要$标志,同普通函数调用一样;而对函数的引用则需要在声明和调用时都要加上引用标志&这个符号*/
echo $str."<br>";

 

/*lamp兄弟边的视频里面有:带有mixed , mixed表示可以传任何类型的数据,bool chown ( string filename, mixed user )这种类型的函数,暂时没有找到示例,碰到的时候再说吧*/

 

//带有...参数的函数,...表示可以传任意多个参数
function demo(){
$args=func_get_args();//获取全部参数的值,类型是数组
$sum=0;
for($i=0; $i<count($args); $i++){
$sum+=$args[$i];
}
return $sum;
}
echo "函数的值为=".demo(1, 2, 3, 4, 5, 6, 7,8,9,10)."<br>";//调用函数


/*回调函数,array array_filter ( array input [, callback callback] ),就是调用这个函数时需要我们传一个函数进来(函数名,函数名字串)*/
function multiplication($x, $y){
return $x*$y;
}
function test($x, $y){
return $x*$x + $y*$y;
}
function callback($a, $b, $fun){
return $a+$b+$fun($a,$b);
}
echo "callback1=".callback(2, 3, "multiplication")."<br>";  //php5.5在使用变量函数时切记一定要加上双引号,否则会提示警告或错误
echo "callback2=".callback(2, 4, "test")."<br>";
$a=array(1, 2, -3,4,-5,6,-7,-8,9,0,false,"",null);
print_r(array_filter($a));      //过滤数组,如果没有条件限制直接过滤掉空值和false,下标不会改变
echo "<br>";
print_r(array_filter($a, "condition"));  //过滤数组,有条件设置的过滤,会根据条件过滤后返回,返回值的下标不会改变
echo "<br>";
function condition($n){
if($n%2== 0)
return true;
else
return false;
}

 

/*内部函数: PHP可以在函数内部再声明函数,目的就是在函数的内部调用,用来帮助外部函数完成一些子功能的。*/
function score($php, $java,$dotnet){
function php($php){
if($php>60)
return "及格";
else
return "不极格";
}
function java($java){
if($java>60)
return "及格";
else
return "不及格";
}
function dotnet($dotnet){
if($dotnet > 60)
return "及格";
else
return "不及格";
}
$total=$php+$java+$dotnet;
$agv=$total/3;
echo "你的php成绩是 {$php} 分, ".php($php)."<br>";
echo "你的java成绩是 {$java} 分, ".java($java)."<br>";
echo "你的dotnet成绩是 {$dotnet} 分, ".dotnet($dotnet)."<br>";
echo "你的总分是: {$total} <br>";
echo "你的平均分是:{$agv} <br>";
}
score(50, 90, 70);


//递归函数: 就是在自己内部调用自己的函数名
function recursion1($num){
echo $num."<br>";
if($num>0)
recursion1($num-1);
else {//将下面的两条语句合成一个整体
echo "------------------<br>";
echo $num."<br>";}
}
function recursion2($num){
echo $num."<br>";
if($num>0)
recursion2($num-1);
else  //此处else后面只有一条输出语句echo
echo "------------------<br>";
echo $num."<br>";  //此处echo在函数执行时,将被剥离出来执行,因为echo不属于if..else语句的一部分
}
recursion1(10);
recursion2(10);
/*对比以上两个函数,会发现递归函数在执行的时候是一层一层剥离出来的*/

 

//取消引用
$num=1234;
$math=&$num;
echo "\$math is ".$math."<br>";
unset($math);          //取消引用,对原变量没有任何影响
echo "\$math is ".$math."<br>";   /*Notice: Undefined variable: math,在php5.5中提示警告,我的警告这 一项在php设置中没有关*/
echo "\$num is "."$num<br>";


?>

以上内容都经过调试,wamp+dw模式下编辑,调试无错

函数部分暂时更新这么多,后续遇到新的内容再加以更新。。

posted @ 2015-12-13 23:46  Tab_000  阅读(499)  评论(0编辑  收藏  举报