PHP学习记录之函数

Posted 天青色wy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP学习记录之函数相关的知识,希望对你有一定的参考价值。

 

  1 <?php 
  2 
  3 //函数
  4 //用户自定义函数
  5 // 函数名和 PHP 中的其它标识符命名规则相同。有效的函数名以字母或下划线打头,后面跟字母,数字或下划线。
  6 
  7 // PHP 不支持函数重载,也不可能取消定义或者重定义已声明的函数。 
  8 // 函数名是大小写无关的,推荐与定义时相同。
  9 function add($a,$b)
 10 {
 11     return $a + $b;
 12 }
 13 
 14 
 15 echo adD(2,3);  //5
 16 
 17 
 18 function func1()
 19 {
 20     function func2()
 21     {
 22         echo "hello world";
 23     }
 24 }
 25 
 26 // func2(); // 不可调用,因为还未定义;
 27 func1(); //调用func1后,func2被定义了,下面就可以调用了;
 28 echo "<br>";
 29 func2(); //hello world
 30 
 31 echo "<br>===============================================<br>";
 32 //函数的参数
 33 //形参:其实就是只能在函数内部使用的变量;
 34 //实参:其实就是赋值给形参变量的数据。
 35 
 36 //函数参数的传值:实参变量通过什么方式传给形参变量
 37 //函数参数通过值传递(即使在函数内部改变参数的值,它并不会改变函数外部的值)。
 38 function func3($a)
 39 {
 40     $a++;
 41     echo $a;
 42 }
 43 $n=1;
 44 func3($n); // 2
 45 echo $n;  //1
 46 echo "<br>===============================================<br>";
 47 //通过引用传递参数。允许改变函数外的实参变量的值;
 48 //注意:引用传递的只能是变量,不能是常量。
 49 function func4(&$a)
 50 {
 51     $a++;
 52     echo $a;
 53 }
 54 $n=1;
 55 func4($n); // 2
 56 // func4(1); error
 57 echo $n;  //2
 58 
 59 echo "<br>===============================================<br>";
 60 // 默认参数的值
 61 // 注意:当使用默认参数时,任何默认参数必须放在任何非默认参数的右侧
 62 function makecoffee($people,$type = "拿铁")
 63 {
 64     echo "<br>喂,{$people},给我来一杯$type 。";
 65 }
 66 
 67 makecoffee("刘亦菲");
 68 makecoffee("刘亦菲",null);
 69 makecoffee("刘亦菲","卡布奇诺");
 70 
 71 
 72 echo "<br>===============================================<br>";
 73 //返回值
 74 //return可以返回包括数组和对象的任意类型。返回语句会立即中止函数的运行,并且将控制权交回调用该函数的代码行。
 75 //函数不能返回多个值,但可以通过返回一个数组来得到类似的效果。
 76 function small_numbers()
 77 {
 78     return array (0, 1, 2);
 79 }
 80 $array = small_numbers();
 81 var_dump ($array); //array(3) { [0]=> int(0) [1]=> int(1) [2]=> int(2) }
 82 
 83 function add1($a,$b)
 84 {
 85     return $a + $b;
 86 }
 87 //返回的值可以被随意调用
 88 var_dump (add(3,"4")*5 +6); // int(41)
 89 // 函数没有返回值则var_dump()的结果为NULL
 90 var_dump(var_dump (add(3,"4")*5 +6));  // NULL 
 91 
 92 //只有一个return则只结束函数不返回任何值;
 93 function func5()
 94 {
 95     echo "只输出这一行";
 96     return ;
 97     echo "这里不输出";
 98 
 99 }
100 func5();
101 
102 //可变函数
103 
104 // 所谓可变函数,其实就是函数名是另一个变量的值。
105 // 这意味着如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它。
106 // 类比于可变变量:$$a;
107 function f1($a)
108 {
109     echo $a;
110 }
111 $b="f1";
112 $b("hahahaa");
113 
114 echo "<br>===============================================<br>";
115 //扩展:
116 // strrchr(haystack, needle)这个函数的两个参数名的意思是:haystack干草堆,needle缝衣针,比喻在干草堆里找缝衣针,大海捞针。
117 // 查找指定字符在字符串中的最后一次出现位置,并返回它(包括自己)之后的字符。
118 $a="liuyifei.gif";
119 echo strrchr($a, "."); // .gif
120 //substr(string, start) 取出字符串中指定位置之后的N个字符
121 $a=‘abcdefgh‘;
122 echo substr($a, 2,2); //cd
123 echo substr($a, 2); //cdefgh ,默认取所有
124 echo substr($a, 2,100); //cdefgh 
125 //可变函数的应用实例:
126 //根据用户上传的不同格式的图片做不同的处理;
127 
128 function do_jpg($f)
129 {
130     echo "<br>在这里处理jpg格式的图片。";
131 }
132 function do_png($f)
133 {
134     echo "<br>在这里处理png格式的图片。";
135 }
136 function do_gif($f)
137 {
138     echo "<br>在这里处理gif格式的图片。";
139 }
140 
141 $file_name = $_GET[‘file_name‘]; // liuyifei.gif
142 $houzhui1 = strrchr($file_name,‘.‘); // .gif
143 $houzhui2 = substr($houzhui1,1);  //gif
144 $function_name = "do_".$houzhui2;  //do_gif
145 $function_name($file_name);
146 
147 //匿名函数
148 echo "<br>===============================================<br>";
149 
150 $gbs = function ($n,$m)
151 {
152     for ($i=$n; ; $i+=$n) 
153     { 
154         if($i%$m==0)
155         {
156             echo "{$n}和{$m}的最小公倍数为".$i;
157             break;
158         }
159     }
160     
161 /*    $i=$n;
162     while ($i<=$i*$n) 
163     {
164         if($i%$m==0)
165         {
166             echo "{$n}和{$m}的最小公倍数为".$i;
167             break;
168         }
169         else
170         {
171             $i+=$n;
172         }
173     }*/
174 };
175 
176 $gbs(17,13);
177 echo "<br>===============================================<br>";
178 
179 //求最大公约数
180 //我的思路:两个数,假如,24、28,先都除以2看看,不能都除尽则除以3看看,一直往后除,如果除以2除尽了,得到12、14,则对这两个数再采取同样的方法,先除以2..最后得到6、7,这两个数再都除以2,发现除不尽,往上+1,加到第一个数字6都不行,此时就终止程序,得到数字6,再把当初传入的第一个数字24除以6,得到的结果4即为24和28的最大公约数!!! 
181 function gys($n,$m)
182 {    
183     function gys1($n,$m)
184     {
185         $i=2;
186         while (1) 
187         { 
188             if ($n%$i==0 && $m%$i==0) 
189             {    
190                 return gys1(($n/$i),($m/$i)) ;// 12,14; 6,7
191             } 
192             $i+=1;
193             if($i>$n)
194             {
195                 return $n;
196             }
197         }
198     }
199     $a = gys1($n,$m);
200     echo "<br>{$n}和{$m}的最大公约数为:".($n / $a);
201 }
202 
203 gys(24,28);
204 
205 
206  ?>

 

以上是关于PHP学习记录之函数的主要内容,如果未能解决你的问题,请参考以下文章

PHP面向对象之选择工厂和更新工厂

超实用的php代码片段

php 一个自定义的try..catch包装器代码片段,用于执行模型函数,使其成为一个单行函数调用

超级有用的9个PHP代码片段

discuz X3.1 源代码阅读,记录代码片段

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情