本节探讨下php语言中die(),exit(),return三者在用法上的一些区别。
die()停止程序运行,输出内容
exit是停止程序运行,不输出内容
return是返回值
die是遇到错误才停止
exit是直接停止,并且不运行后续代码,exit()可以显示内容。
return就是纯粹的返回值了,但是也不会运行后续代码
exit(0):正常运行程序并退出程序;
exit(1):非正常运行导致退出程序;
return():返回函数,若在主函数中,则会退出函数并返回一值。
具体解释如下:
2,return是语言级别的,它表示了调用堆栈的返回;而exit是系统调用级别的,它表示了一个进程的结束。
3,return是函数的退出(返回);exit是进程的退出。
4,return是C语言提供的,exit是操作系统提供的(或者函数库中给出的)。
5,return用于结束一个函数的执行,将函数的执行信息传出个其他调用函数使用;exit函数是退出应用程序,删除进程使用的内存空间,并将应用程序的一个状态返回给OS,
这个状态标识了应用程序的一些运行信息,这个信息和机器和操作系统有关,一般是 0 为正常退出,非0 为非正常退出。
6,非主函数中调用return和exit效果很明显,但是在main函数中调用return和exit的现象就很模糊,多数情况下现象都是一致的。
有了以上的介绍,对于php中die(),exit(),return的用法,是不是理解的更透彻了。
,祝大家学习进步。
在php编程中,当使用mb_detect_encoding函数进行编码识别时,经常会遇到识别编码有误的问题。
比如,对GB2312和UTF-8,或UTF-8和GBK(主要针对cp936的判断),有资料说是,当字符较短时,mb_detect_encoding判断会有误差。
例如:
/**
* 字符串编码函数 mb_detect_encoding
* edit by www.
*/
$encode = mb_detect_encoding($keytitle, array("ASCII",'UTF-8′,"GB2312′,"GBK",'BIG5′));
if ($encode == “UTF-8″){
$keytitle = iconv("UTF-8″,"GBK",$keytitle);
}
?>
以上代码实现:
检测字符串的编码是否UTF-8,是则转换为GBK。
可是当 $keytitle = “%D0%BE%C6%AC”;时。
检测结果却是UTF-8.这个bug其实不算是bug,写程序时也不应当过于依赖mb_detect_encoding,当字符串较短时,检测结果产生偏差的可能性很大。
可以用如下的方法解决之:
参数解释:
被检测的输入变量、编码方式的检测顺序(为真时后面自动忽略)、strict模式。
说明:
对编码检测的顺序进行调整,将最大可能性放在前面,这样减少被错误转换的机会。
一般先检测gb2312,当有GBK和UTF-8时,需要将常用的放到前面。
本文带领大家了解break和continue的使用,及它们在循环语句中的作用。
1、break (int); 语句
//break的作用为退出循环体,当break后面加上数字时,表示退出第几层的循环。
多用在while、do…while、for、foreach、switch语句中。
例子:
<?php /** * break 退出循环 * edit by www. */ $i = 1; while(true){ echo “PHP视频教程”.$i; $i++; if($i==10){ break; } }//当循环语句的$i数字自增到10时就执行break语句,直接跳出了while的循环体。 ?>
如果给break后面加数字时,循环语句的执行过程则有所改变。
例子:
<?php /** * break 退出循环的例子 * edit by www. */ while($i++<10){ echo '$i='.$i; while($j++<5){ if($j==2){ break 2;//跳出两层循环代码的执行。 } echo ' $j='.$j; } echo '‘; } } ?>
代码说明:
$i=1 $j=1就结束循环了。
进行第一次循 环时,当$i=1时开始执行循环体第一层while的代码,顺着输出$i=1,进入了第二层while循环,经过if判断,$j不等于2,不执行if体里 的break 2;这一语句
块,转而执行输出语句输出$j=1然后再进行第二层循环的第二次判断,这时$j=2就执行了if体里的break 2;
注:这里的break后面是数字2表明是退出两层循环体代码,即第一层和第二层的循环体都跳出不再进行判断循环,这样就产生了上面的输出结 果:$i=1 $j=1。
2、continue (int); 语句
//continue语句和break语句执行结果相似,continue是跳过几层循环,忽略跳循环体里的代码段,直接执行到循环体结尾进行下一次的循环,和break语句一样也可以使用在
while、do…while、for、foreach、switch语句中。
例子:
<?php /** * 跳过循环 continue * edit by www. */ while($i++<5){ if(++$j==2){ continue; } echo '$i='.$i.'‘; } ?>
代码说明:
如果没有在while循环体里加入if判断语句,输出的结果是:$i=1 $i=2 $i=3 $i=4;但是加入了if判断语句,输出结果是:$i=1 $i=3 $i=4,这正是continue语句的影响
,continue语句是跳过了当$j++后得到2后,也就是$j=2时的本次循环将执行continue跳过while循环体语句,直接返回到循环体的尾部(也就是跳到了循环体的头部)继续下
一次的循环运算,当如果continue语句后面加上数字时输出的结果又有新的改变。
例子:
<?php while(++$a<3){ while(++$b<4){ if($b==2){ continue 2; } echo ' $b:'.$b; } $b=0; echo '$a:'.$a; echo ' ‘; }
代码说明:
输出结果:$b=1 $b=3 $a=2 先执行外层循环,$a=1,条件为“真”,执行第二层循环$b=1,条件也为“真”,经过if判断,为“假”不执行continue语句,执行echo ‘ $b:’.$b;
这条语句,输出的是$b:1 ;然后再里层while的循环,这里$b自增后$b=2,里层的while条件继续为“真”,继续执行里层循环,进入if判断,结果if条件判断为“真” 执行
“continue 2;”这一语句直接跳过了两层循环体的代码来到父循环的尾部(也就是头部),父、子层里的循环体代码都不执行,接着继续判断父层循环条件$a=2小于3成 立,
再次进入里层循环,这时$b=3里层循环条件成立(真),if判断条件为“假”不执行“continue 2;”,执行“echo ‘ $b:’.$b;”语句,输出了$b=3,然后继续判断里层while循环
条件,这里$b=4,循环条件不成 立,结束了里层while循环,执行“$b=0;echo’$a:’.$a;echo’
‘;”这三条语句后来到外层while循环, 再次进行条件判断,这里$a已经等于3,条件不成立,外层循环也结束了。
注:break与continue的区别,它们都可以在后面加具体数字,但break是当条件成立就退出了跟在它后面的数字决定的几层循环体(如果没有数字就是退出本次循环体),而
continue是跳出当条件成立的跟在它后面的数字决定的几层循环体(如果没有数字就是退出本次循环体),循环体里的代码段一句都不执行,转到循环体的 尾部(即头部)
再继续循环条件判断;
总之,break是退出循环体执行,而continue是 跳过某层符合判断条件语句 的 循环体 的执行,转到 某层循环 继续执行循环体,直到循环条件 不成立 才结束循环语句。
3、exit()和die()语句
die是exit的别名,它们的作用一样,都是结束对整个脚本的执行,经常用在像把数据录入数据库时、判断某个文件是否存在等场合。