PHP学习记录扩展

  1 <?php 
  2 
  3 // 文件加载
  4 // include "要载入的文件路径"; //可以是相对路径,或本地物理路径。
  5 // 可以载入php文件,也可以是html文件
  6 // include "../../dir1/dir2"
  7 
  8 //获取路径 
  9 echo "<br>当前路径为:".__DIR__;
 10 $file = __DIR__."\Test\\test.php"; //转义
 11 include $file;
 12 //getcwd()这个函数可以获得当前浏览的网页文件所在的路径。
 13 //注意与__DIR__的区别。
 14 //假如当前浏览的网页是func.php,里面载入了Test文件夹下的test.php文件,但是test.php里面的getcwd()获得的依旧是func.php的绝对路径,而__DIR__获得的是test.php的绝对路径,要加以区分。
 15 
 16 //getcwd()中的cwd:current working directory
 17 
 18 //四种载入文件方式的区别
 19 /*
 20 include:可重复载入,如果载入失败,报错后继续执行后续语句;
 21 include_once:不可重复载入,如果载入失败,报错后继续执行后续语句;
 22 require:可重复载入,如果载入失败,报错后终止程序;
 23 require_once:不可重复载入,如果载入失败v,报错后继续执行后续语句;
 24 
 25 */
 26 
 27 //错误处理
 28 //常见错误代号:(都是系统常量,integer)
 29 //NOTICE:8提示性错误,轻微;错误发生后,后面的程序继续执行;
 30 //WARNING:2警告性错误,继续执行;
 31 //ERROR:1致命错误,不执行后续程序;
 32 
 33 // 在php.ini配置文件中可以设置错误报告的等级,error_reporting = E_ALL,设置成all则报告所有,设置成error则只会报告error型的错误;或者设置E_NOTICE | E_WARNING ,只报这两中错误;
 34 
 35 
 36 //错误触发
 37 //有些程序本身没错,但在运行时出现了不符合预计的情形,比如数据不符合要求,此时程序员可以主动触发一个错误,也可以说是由程序员主动创建一个错误,这就是"用户错误",包括:E_USER_NOTICE,E_USER_WARNING,E_USER_ERROR
 38 
 39 //触发语句:trigger_error("自定义的错误提示信息",用户错误代号)
 40 
 41 
 42 function reg($age)
 43 {
 44     if($age>70 || $age<12)
 45     {
 46         trigger_error("[用户年龄不在我们的服务范围内。]",E_USER_NOTICE);
 47     }
 48     else
 49     {
 50         echo "注册通过";
 51     }
 52 
 53 }
 54 
 55 $age = 38;
 56 reg($age);
 57 $age = 88;
 58 reg($age);//Notice: [用户年龄不在我们的服务范围内。] in C:\mywamp\Apache24\htdocs\day3\func.php on line 446
 59 
 60 //在php.ini中,字段display_errors = on(或者off)决定程序是否展示错误;(改配置要重启apache服务器)
 61 /*
 62 或者在某个php文件中自行设置是否展示错误,展示何种错误:
 63 ini_set("display_errors", 0);//表示不展示所有致命错误
 64 ini_set("error_reporting",E_WARNING);//只报告警告
 65 
 66 在php.ini中log_errors = On 或者 Off 决定是否记录错误;
 67 ini_set("log_errors",1); //记录错误
 68 还可以设置错误记录到哪里:
 69 php.ini中:
 70 error_log = error.txt //在php文件所在的文件夹下建立txt
 71 php代码中:
 72 ini_set("error_log","error.txt");
 73 
 74 */
 75 
 76 
 77 //自定义错误
 78 
 79 // 自定义错误分为两步:
 80 // 1、声明使用自己的函数来处理错误;
 81 set_error_handler("my_error_handler");//函数名自定义
 82 // 2、定义该函数;
 83 function my_error_handler($err_Code,$err_Msg,$err_File,$err_Line)
 84 {
 85     $str = "<br><font color='red'>出错啦!</font>";
 86     $str.="<br>错误发生时间:".date("Y-m-d H:i:s");
 87     $str.="<br>错误代号:".$err_Code;
 88     $str.="<br>错误信息:".$err_Msg;
 89     $str.="<br>错误文件:".$err_File;
 90     $str.="<br>错误行号:".$err_Line;
 91     echo $str; //输出错误
 92     file_put_contents("./myError.html", $str,FILE_APPEND);//生成错误日志,追加写入
 93 
 94 }
 95 // 以后遇到错误系统都会自动调用上面的错误处理函数
 96 // 制造错误:
 97 echo $haha; //未定义变量
 98 include "./hahaha.php";//载入失败
 99 function f(){};
100 // ff(); //调用未定义函数
101 
102 echo "hahahaha"; //此行不输出
103 
104 
105 // 注意:自定义错误处理只能处理notice和warning,不能处理error。
106 
107 echo "<br>=====================================================<br>";
108 $a=666;
109 echo "a$a"; //a666,建议用{}括起来
110 echo '"a"$a'; //"a"$a,单引号不能识别$变量,里面能带“”
111 echo 'ab\'c';  //ab\'c
112 echo "adc\r\n\tdefg"; // \n\r都是换行,体现在页面的源代码中,不同浏览器不同系统使用\n或\r。
113 
114 //heredoc字符串,类似于""字符串
115 $str = <<< "aaa"
116 <br>这里面可以写多行内容,
117 <br>这里面可以写多行内容,
118 <br>这里面可以写多行内容,
119 <br>结束的时候只能是另起一行,写aaa;不要写别的任何东西;
120 <br>注释都不行;开始行也一样,加个空格都不行;
121 aaa;
122 echo $str;
123 /*
124 $js = <<< "aa"
125 <script>
126     var v1 = "hello people";
127     alert(v1);
128 </script>
129 aa;
130 echo $js;
131 */
132 //nowdoc字符串也一样。类似于‘’字符串
133 
134 //字符串长度
135 // strlen(字符串)字节长度
136 echo strlen("abc123雯"); // 9,utf8中一个汉字占3个字节
137 echo strlen("ab\n\rc\tde");  //8
138 
139 // mb_strlen(字符串)字符长度
140 // 使用之前要在php.ini文件中开启扩展模块extension=mbstring,否则会报错
141 echo mb_strlen("abc123大\r"); //8,3+3+1+1
142 
143 // 用gbk编码打开utf8编码的文件,文件内容为:我是chinese,会出现乱码,"我"在utf8中用三个字节表示为xxx,“是”也是xxx,连起来就是xxx xxx chinese,此时gbk会将前两个xx当成一个汉字,这就出现三个乱码的汉字和chinese了。
144 
145 
146 echo "<br>=====================================================<br>";
147 
148 //常用字符串函数
149 // trim:消除一个字符串两端的空白字符
150 // ltrim和rtrim左右
151 
152 echo trim("  a bc  ");
153 
154 // implode:将一个数组的值连接起来组成一个字符串,通join
155 
156 $a = ["花花",123,3.14];
157 
158 echo join('-',$a);//花花-123-3.14
159 echo implode('-',$a);//花花-123-3.14
160                                                                                                                                                                                           
161 // explode:将一个字符串使用指定的分隔符分割为一个数组
162 var_dump (explode('-',"花花-123-3.14"));//array(3) { [0]=> string(6) "花花" [1]=> string(3) "123" [2]=> string(4) "3.14" }
163 
164 //str_split:将字符串按指定的长度分割成一个数组
165 //str_replace:替换字符串
166 echo str_replace('-','==',"花花-123-3.14");//花花==123==3.14
167 
168 // strpos:获取一个字符串中某个子字符串首次出现的位置
169 echo strpos("abc.3.14.5",'.'); //3
170 
171 // strrpos:获取一个字符串中某个子字符串最后一次出现的位置
172 echo strrpos("abc.3.14.5",'.'); //8
173 
174 // strtolower:转小写
175 // strtoupper:转大写
176 echo strtolower("ABCde");//adcde
177 echo strtoupper("ABCde");//ABCDE
178 
179 // lcfirst:首字母小写
180 // ucfirst:首字母大写
181 echo lcfirst("ABC"); //aBC
182 echo ucfirst("abc"); //Abc
183 
184 // ucwords:所有单词的首字母转大写
185 echo ucwords("hello world."); //Hello World.
186 
187 // strstr:截取指定字符首次出现的位置后面的子字符串
188 echo strstr('abc.com.txt', '.'); //.com.txt
189 // strrchr:截取指定字符最后一次次出现的位置后面的子字符串
190 echo strrchr('abc.com.txt', '.'); //.txt
191 
192 //substr:从指定位置处取指定长度的子字符串
193 echo substr('adcde',2,1); //c
194 
195 // 练习:从用户上传的文件中取出图片文件
196 
197 $files = ['adc.gif','123.txt','hehe.PNG','haha.jpg','adn112.mp4'];
198 $len = count($files);
199 for ($i=0; $i < $len; $i++) { 
200     $houzhui = strrchr($files[$i],'.');
201     $houzhui = substr($houzhui,1);
202     $houzhui = strtolower($houzhui);
203     if ($houzhui == "jpg" || $houzhui=="png" || $houzhui=="gif") {
204         echo "<br>$files[$i]";
205     }
206 }
207 // adc.gif
208 // hehe.PNG
209 // haha.jpg
210 
211 
212 echo "<br>=====================================================<br>";
213 
214 //数组
215 
216 // 下标:数组的下标只能是整数和字符串,不给则默认整数,从0开始,整数加1;
217 $arr1 = array('a',3=>'b','c','d'=>'d');
218 var_dump($arr1);//array(4) { [0]=> string(1) "a"  [3]=> string(1) "b"  [4]=> string(1) "c"   ["d"]=> string(1) "d" }
219 
220 
221 //数组维度,即嵌套数组,数组的内部元素也是数组
222 // 练习:计算数组的总和
223 // 这里的数组很规范,都没有下标,使用for循环遍历即可
224 $arr2 = [[1,2,3],[4,5,6,7],[8,9,10,11,12]];
225 $len1 = count($arr2);
226 $sum = 0;  //总和
227 $count = 0; //个数累加器
228 for ($i=0; $i < $len1; $i++) { 
229     $arr3 = $arr2[$i];
230     $len2 = count($arr3);
231     for ($j=0; $j < $len2; $j++) { 
232         $sum += $arr3[$j];
233         $count++;
234         $average=$sum/$count;
235     }
236 }
237 
238 echo "<hr>数组的总和为:{$sum},平均值为:{$average}";
239 
240 
241 
242 // 对于那些有下标的数组遍历,用到foreach语句比较方便
243 $arr4 = [1,'a'=>'aa','5'=>3,9=>666];
244 foreach ($arr4 as $key => $value) {
245     echo "<hr>{$key}:{$value}";
246 }
247 
248 // current() 函数返回数组中的当前元素的值。每个数组中都有一个内部的指针指向它的"当前"元素,初始指向插入到数组中的第一个元素。
249 // 移动内部指针的方法还有:next()下一个,prev()上一个,reset()第一个,end()最后一个
250 echo "<hr>".current($arr4); //1
251 echo "<hr>".next($arr4);    //aa
252 echo "<hr>".current($arr4); //aa
253 echo "<hr>".prev($arr4); //1
254 echo "<hr>".end($arr4); //666
255 echo "<hr>".key($arr4); //9
256 
257 echo "<hr>".reset($arr4); //1
258 
259 //也可以用for循环遍历
260 
261 reset($arr4);
262 $len = count($arr4);
263 for ($i=0; $i < $len; $i++) { 
264     $key = key($arr4);
265     $value = current($arr4);
266     echo "<hr>{$key}:{$value}";
267     next($arr4);
268 
269 }
270 //常用数组函数
271 $arr5 = [1,'A','a','a1','3',2];
272 echo "<hr>".max($arr5);  //3
273 echo "<hr>".min($arr5);  //2,这种含字母的数组最小值感觉很奇怪
274 var_dump (in_array('haha',$arr5)); //false
275 //生成某个范围的连续值的数组:
276 print_r(range(1,9));//Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 [8] => 9 )
277 echo "<br>";
278 //取出一个数组中所有的"键"并放到一个索引数组中:
279 $a = array_keys($arr4);
280 var_dump($a);//array(4) { [0]=> int(0) [1]=> string(1) "a" [2]=> int(5) [3]=> int(9) }
281 echo "<br>";
282 //取出一个数组中所有的"值"并放到一个索引数组中:
283 $a = array_values($arr4);
284 var_dump($a);//array(4) { [0]=> int(1) [1]=> string(2) "aa" [2]=> int(3) [3]=> int(666) }
285 
286 // 将一个数组的最后一个元素删除,并返回该元素的值:
287 echo "<br>".array_pop($arr5); // 2,此时$arr5里面就没有2了
288 //向一个数组尾部追加一个或多个元素:
289 array_push($arr5, "这",'是添加的');
290 var_dump($arr5);//array(7) { [0]=> int(1) [1]=> string(1) "A" [2]=> string(1) "a" [3]=> string(2) "a1" [4]=> string(1) "3" [5]=> string(3) "这" [6]=> string(12) "是添加的" }
291 //翻转数组内的元素,生成一个新数组:
292 $a = [1,2,3];
293 $b = array_reverse($a);
294 var_dump($b);//array(3) { [0]=> int(3) [1]=> int(2) [2]=> int(1) }
295 var_dump($a);//array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) }
296 
297 //数组排序
298 // sort():由低到高,会改变原数组,不保留键
299 // rsort():由高到低
300 $a = ['a'=>2,5,3,2=>7,6];
301 sort($a); //23567
302 rsort($a); //76532
303 //asort()和arsort()会保留键
304 
305 //冒泡排序算法
306 //冒泡排序其实是笨方法,假如有10个数,先将第一个数和第二个数比,谁大就放在后面,再将第二个数和第三个数比,以此类推,要比较9次,最后最大的那个数肯定被排到了末尾,前面的数大小顺序依旧是乱的,这是第一轮比较;总共比较9轮,到第9轮时只有两个数,比较一次即可。即n个数冒泡,比较n-1轮,第一轮比较n-1次,第n-1轮比较1次。
307 // 演示如下:
308 $a = [3,5,2,7,9,8,4,6,0,1];
309 $len = count($a);
310 $b = [];
311 for ($i=1; $i < $len; $i++) { 
312     for ($j=0; $j < $len-$i; $j++) { 
313         if ($a[$j]>$a[$j+1]) 
314         {
315             $temp = $a[$j];
316             $a[$j] = $a[$j+1];
317             $a[$j+1] = $temp;
318         }
319     }
320 }
321 echo "<hr>";
322 var_dump($a);//array(10) { [0]=> int(0) [1]=> int(1) [2]=> int(2) [3]=> int(3) [4]=> int(4) [5]=> int(5) [6]=> int(6) [7]=> int(7) [8]=> int(8) [9]=> int(9) }

 

posted @ 2020-02-29 23:53  天青色wy  阅读(436)  评论(0编辑  收藏  举报