1 <!DOCTYPE unspecified PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 2 <html> 3 <?php 4 //1. 简单函数示例,创建一个n*m的table 5 /* PHP中的函数格式,其中可以没有返回值 6 * function(参数1,参数2...) { 7 * 函数体 8 * return 返回值; 9 * } 10 * 在函数定义之前和之后都可以调用函数 11 */ 12 create_table("3*4的表格", 3, 4); 13 14 function create_table($tablename, $rows, $cols) { 15 echo "<table align='center' border='1' width='".($cols*100)."'/>"; 16 echo "<caption><h1>{$tablename}</h1></caption>"; 17 for ($i = 1; $i <= $rows; $i++) { 18 echo "<tr>"; 19 for ($j = 1; $j <= $cols; $j++) { 20 echo "<td width='100'>".($i*$cols-$cols+$j)."</td>"; 21 } 22 echo "</tr>"; 23 } 24 25 echo "</table>"; 26 } 27 28 create_table("5*6的表格", 5, 6); 29 30 // 2. 局部变量、全局变量与静态变量 31 /* 局部变量:函数内部声明,作用域仅限于函数内部 32 * 全局变量:在函数中使用要用global加载全局变量,或者使用$GLOBALS数组 33 * 静态变量:在局部变量前加static使改变量为所有对该函数的调用间共享 34 * */ 35 $a = 3; 36 $b = 4; 37 globalvar(); 38 globalvar(); 39 function globalvar(){ 40 static $c = 0; //静态局部变量 41 $c++; 42 global $a; //不加这一句直接输出$a会报错 43 echo $a; 44 echo $GLOBALS['b']; //使用全局数组访问$b 45 echo $c; //分别打印1,2 46 echo "<br/>"; 47 } 48 49 // 3. 按引用传值,在变量前加上&符将按引用传值,这种情况下只能传变量而不能传一个值 50 $a = 20; 51 yinyong($a); 52 function yinyong(&$a){ 53 $a = 30; 54 } 55 echo $a."<br/>"; 56 57 // 4. 默认参数,和C++一样 58 function outme($name, $age="20"){ 59 echo $name.",".$age."<br/>"; 60 } 61 outme("张三"); 62 63 // 5. 可变个数参数,用func_get_argc()来得到参数列表 64 function more_argc(){ 65 $args = func_get_args(); 66 for ($i = 0; $i < count($args); $i++) 67 echo "参数".($i+1).":".$args[$i]."<br/>"; 68 } 69 more_argc("11","22","33"); 70 71 // 6.回调函数,使用函数作为参数 72 /* 两种方法可以使用回调函数 73 * 1.使用变量函数名 74 * 2.使用call_user_func_array()来调用 75 * 类静态函数和对象的方法回调有不同的地方,在下面实例说明 76 */ 77 //下面使用字符串来调用函数,但这种方法不直观,并不常用 78 function varfunc($func) { 79 echo $func("varfunc_outstring"); 80 } 81 function outstring($str) { 82 echo $str."<br/>"; 83 } 84 varfunc("outstring"); 85 //下面使用call_user_func_array()来回调 86 call_user_func_array("outstring", array("varfunc_outstring")); 87 //下面分别调用类静态函数和成员函数 88 class Class_varfunc { 89 static function fun1($str){ 90 echo $str."<br/>"; 91 } 92 function fun2($str){ 93 echo $str."<br/>"; 94 } 95 } 96 //调用类静态函数,直接用类名加方法名即可 97 call_user_func_array(array("Class_varfunc", "fun1"), array("varfunc_outstring")); 98 //调用类非静态函数,要用对象的引用 99 call_user_func_array(array(new Class_varfunc(), "fun2"), array("varfunc_outstring")); 100 ?> 101 102 103 104 105 </html>
执行结果