找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1849|回复: 0

[教程] while 的一点理解

[复制链接]
发表于 2013-4-7 09:18:15 | 显示全部楼层 |阅读模式 来自 中国–广东–湛江
  1. while是php里面用的最多的一个函数,但是观察了很久,但是很多人用习惯了,并不知道里面是怎么回事,只是习惯性打上去;
  2.            先测一下一秒中,while可以运行多少次循环;
  3.            $time1 = microtime(true);
  4.            $i =0;
  5.            while(1)
  6.            {
  7.            $i++;
  8.            if(microtime(true)- $time1 >1)
  9.            {
  10.            echo $i;
  11.            exit();
  12.            }
  13.            }
  14.            ?>
  15.            运行结果
  16.            389443;
  17.            while是当whle括号里面的条件成立的话,就执行,这是绝对正确的
  18.            所以while(1)就是无限循环;
  19.            实例1:
  20.            $sql = 'select * from table';
  21.            $result = mysql_query($sql);
  22.            while($arr = mysql_fetch_assoc($result))
  23.            {
  24.            }
  25.            这一个理解是当while括号里面$arr = mysql_fetch_assoc($result);成立的情况下,就会一直往下运行;
  26.            $arr = mysql_fetch_assoc($result);
  27.            当执行这个查询的话,第一次,指针就对准第一行,如果第二次查询的时候,他就会对准第二行,一直找到没有结果,返回false就不会执行了
  28.            错误写法:
  29.            $sql = 'select * from table';
  30.            $result = mysql_query($sql);
  31.            $arr = mysql_fetch_assoc($result));
  32.            while($arr = mysql_fetch_assoc($result))
  33.            {
  34.            }
  35.            这样执行过来的结果就会少了一行;
  36.            实例2:两分算法
  37.            while($ip1num>$ipNum || $ip2num<$ipNum)
  38.            {
  39.            }
  40.            这是discuz里面取得ip地址对应的真实地址的function
  41.            附件里面有这个function的文件包
  42.            简单的拆成
  43.            while($a>1 || $b <1)
  44.            {
  45.            }
  46.            再拆
  47.            while($a >1)
  48.            {
  49.            }
  50.            while($b<1)
  51.            {
  52.            }
  53.            如果$a 是先有值的情况下,
  54.            如果$a =1;
  55.            那样就执行不下去,条件不成立
  56.            或者$a =2;
  57.            这样就无限循环了;
  58.            重点
  59.            如果$a没有先附值
  60.            刚开始我一直以为是错误,但是实际上他不会有错误,
  61.            这是php不同的地方
  62.            简单通过一个程序测试一下
  63.            $i =0;
  64.            while($a<1)
  65.            {
  66.            $i++;
  67.            if(microtime(true)- $time1 >1)
  68.            {
  69.            echo $i;
  70.            $a =1;
  71.            }
  72.            }
  73.            ?>
  74.            运行结果
  75.            272487;
  76.            while($a <1)
  77.            他会一直执行,直到程序里面括号里面重新得到一个值$a =1;
  78.            $a<1不成立,他才会停止运行;
  79.            所以
  80.            while($a>1 || $b <1)
  81.            {
  82.            }
  83.            的理解是当括号内部执行到$a<=1同时$b>=1两个条件分成成立的情况下执行才中止执行
  84.            这样就是双分算法了
  85.            如果这两个都理解的话,基本上while就非常清楚了
  86.            while(1)非常 庞大的,
  87.            本来想帖一个dos的攻击源代码出来,但是感觉如果不小心文章推广得太开,到时候就麻烦了。
  88.            dos源码非常 简单,只要上面理解了,非常 容易就可以写一个出来;
  89.            ddos就是通过一个调用主控,调用不同服务器网站上面的程序,让他们同时运行,就形成了dos,关键是鸡的数量;
复制代码

评分

参与人数 1金币 +5 收起 理由
猫性男孩 + 5 赞一个!

查看全部评分

发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 需要先绑定手机号

关闭

站长推荐上一条 /1 下一条

QQ|侵权投诉|广告报价|手机版|小黑屋|西部数码代理|飘仙建站论坛 ( 豫ICP备2022021143号-1 )

GMT+8, 2024-11-22 20:10 , Processed in 0.042651 second(s), 13 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表