PHP验证码在注册或者登陆的时候是必不可少的,主要是为了防止垃圾注册或者恶意登陆,在TP系统中有内置的生成验证码的类,直接调用就可以了,而在PHP的原生代码中,则需要使用image之类的函数,使用imagecreate来进行画布的创建,其实如果我们要扒开TP图片类的话,也是使用了PHP的函数类来创建的,好了,我们先看一下PHP生成动态随机码的方法吧,可以自行指定图片的大小,其中使用了创建画布imagecreate函数和随机码的函数mt_rand等等,代码如下:$image_width=100;$image_height=100;$image_str='';if(isset($_GET['w'])){$image_width=intval($_GET['w']);}if(isset($_GET['h'])){$image_height=intval($_GET['h']);}if(isset($_GET['s'])){$image_str=$_GET['s'];}$img=imagecreate($image_width,$image_height);$color=imagecolorallocate($img,mt_rand(157,255),mt_rand(157,255),mt_rand(157,255));imagefilledrectangle($img,0,$image_height,$image_width,0,$color);$step=mt_rand(15,30);$start=mt_rand(0,$step);$color=imagecolorallocate($img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));imagesetthickness($img,mt_rand(3,10));if($image_height>$image_width){for($i=$start;$i<$image_height*2;$i+=$step){imageline($img,0,$i,$i,0,$color);}}else{for($i=$start;$i<$image_width*2;$i+=$step){imageline($img,$i,0,0,$i,$color);}}if($image_str!=''){$black=imagecolorallocate($img,0,0,0);imagestring($img,12,5,5,$image_str,$black);}header('Content-type:image/png');//www.zhansanjie.comimagepng($img);imagedestroy($img);一段很简单的PHP生成动态随机码的代码,代码有点粗糙,但是比较容易理解,如果是简单的应用,可以封装成一个图片验证码类,在使用的时候直接进行调用就OK了。
今天做的一个项目需要一个签到的功能,也就是需要获取在某个时间段下的周几,或者未来某个时间几天以后的周几,我们需要获取的就是周天数,因为是集团做的一个功能,所以在TP里面写了一个获取周几的一个函数方法,我们先来看一下方法函数如下:functiongetTimeWeek($time,$i=0){$weekarray=array("一","二","三","四","五","六","日");//www.zhansanjie.com$oneD=24*60*60;return"周".$weekarray[date("w",$time+$oneD*$i)];}getTimeWeek方法共有两个参数,$time是我们定义的时间,是一个时间戳的形式,$i是今天开始的意思,我们可以测试一下,如下:$time=time();echogetTimeWeek($tiem);可以获取到当前时间戳的周几,这样的项目实例在应用中是比较少见的,这里仅做一个记录使用,实际的意义不是太大。
PHP中的循环结构大致有for循环,while循环,do{}while循环以及foreach循环几种,不管哪种循环中,在PHP中跳出循环大致有这么几种方式:<?php$i=1;while(true){//这里看上去这个循环会一直执行if($i==2){//2跳过不显示$i++;continue;}elseif($i==5){//但到这里$i=5就跳出循循环了break;}else{echo$i.'<br>';}$i++;}exit;echo'这里不输出';?>结果:134continuecontinue是用来用在循环结构中,控制程序放弃本次循环continue语句之后的代码并转而进行下一次循环。continue本身并不跳出循环结构,只是放弃这一次循环。如果在非循环结构中(例如if语句中,switch语句中)使用continue,程序将会出错。例如在下面的这段PHP代码片段中:<?phpfor($i=1;$i<=100;$i++){if($i%3==0||$i%7==0){continue;} else{echo”$i\n<br/>”;}}?>PHP的代码片段的作用是输出100以内,既不能被7整除又不能被3整除的那些自然数,循环中先用if条件语句判断那些能被整除的数,然后执行continue;语句,就直接进入了下个循环。不会执行下面的输出语句了。breakbreak是被用在上面所提的各种循环和switch语句中的。他的作用是跳出当前的语法结构,执行下面的语句。break语句可以带一个参数n,表示跳出循环的层数,如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环。看下面这个多重循环嵌套的例子:for($i=1;$i<=10;$i++){for($j=1;$j<=10;$j++){$m=$i*$i+$j*$j;echo”$m\n<br/>”;if($m<90||$m>190){break2;}}}这里使用了break2跳出了两重循环,你可以试验一眼,将2去掉,得到的结果是完全不一样的。如果不使用参数,跳出的只是本次循环,第一层循环会继续执行下去。gotogoto实际上只是一个运算符,和其他语言一样,PHP中也不鼓励滥用goto,滥用goto会导致程序的可读性严重下降。goto的作用是将程序的执行从当前位置跳转到其他任意位置,goto本身并没有要结束的循环的作用,但其跳转位置的作用使得其可以作为跳出循环使用。但PHP5.3及以上版本停止了对goto的支持,所以应该尽量避免使用goto。下面的是一个使用了goto跳出循环的例子for($i=1000;$i>=1;$i–){if(sqrt($i)<=29){gotoa;}echo“$i”;}a:echo”thisistheend”;例子中使用了goto来跳出循环,这个例子用来检测1000以内,那些数的平方根大于29。exitexit是用来结束程序执行的。可以用在任何地方,本身没有跳出循环的含义。exit可以带一个参数,如果参数是字符串,PHP将会直接把字符串输出,如果参数是integer整形(范围是0-254),那个参数将会被作为结束状态使用。<?phpfor($i=1000;$i>=1;$i–){if(sqrt($i)>=29){echo”$i\n<br/>”;}else{exit;}}echo”本行将不会被输出”;?>上面这个例子中直接在从循环里结束了代码的运行,这样会导致后面的代码都不会被执行,如果是在一个phpweb页面里面,甚至连exit后面的html代码都不会被输出。returnreturn语句是用来结束一段代码,并返回一个参数的。可以从一个函数里调用,也可以从一个include()或者require()语句包含的文件里来调用,也可以是在主程序里调用,如果是在函数里调用程序将会马上结束运行并返回参数,如果是include()或者require()语句包含的文件中被调用,程序执行将会马上返回到调用该文件的程序,而返回值将作为include()或者require()的返回值。而如果是在主程序中调用,那么主程序将会马上停止执行<?phpfor($i=1000;$i>=1;$i–){if(sqrt($i)>=29){echo”$i\n<br/>”;}else{return;}}echo”本行将不会被输出”;?>这里的例子和上面使用exit的效果是一样的。在循环结束条件,自然跳出这个当然是最好理解了,当循环满足循环临界条件时就是自己退出。以上是PHP中跳出循环的几种方式的简单总结。if不是循环结构,所以不能使用break,continue退出。如果你非要在if语句中这样用的话,可以把这个if语句放在一个循环结构中$i=0;$s=1;while($i==0){if($s==1){$v=8;break;}$v=9;}echo$v;
6月26日下午4点左右,海南省临高县临城镇文澜江和北部湾交汇海域发生一起溺水事件,造成4人死亡。救援现场据了解,当天下午6名男生和3名女生一共9人,结伴到临高县文澜江和北部湾交汇海域去游玩。下午4点左右,其中2名男生下水游玩,1人不慎溺水。见同伴溺水,岸上的4名男生赶紧下水帮忙施救,结果有4人不幸溺水,2人成功脱困游上了岸。4名溺水者中3人为学生。事发后,临高县委县政府当即组织各方救援力量前往救援,当地公安、消防等部门迅速到场全力开展救援工作,搜救人员乘坐皮筏艇,不断地在水面搜寻。此外海南省应急管理厅、省教育厅等相关负责人也赶到现场开展救援指挥工作。救援现场(网友视频截图)据参与救援的消防部门介绍,当天19点06分他们接到从公安部门转警通知立即赶赴现场,因该海域水文情况复杂,有多条较深的海沟,因此对搜救工作造成了一定程度的困难。消防救援人员先后使用钩子、声呐仪器等方式搜索失踪人员,最后通过潜水员下海搜索找到最后一名失踪人员,于27日5点左右完成搜救工作。目前,4名溺水人员已全部被找到,均已无生命迹象。救援现场失踪3人仍未找到!进入高发期,警钟长鸣!6月26日下午,四川泸州市叙永县龙凤镇,6名学生在河边玩耍时,其中4人落水。尽管有1人被河边钓鱼的群众救起,但另3人失踪,至今下落不明。目前,5支专业救援力量、当地及永宁河下游3个乡镇党政干部、民兵、村社干部等上百人正在事发地及永宁河下游全力搜救,救援力量和设备还包括蛙人、水下机器人、大型无人机、水下探测仪等。生命的逝去让人心痛!年年提醒防溺水可事故还是年年有近期,全国已发生多起浙江5岁女娃家门口落水心肺复苏救了她一命,但......半个月前,妞妞在家门玩耍时不慎落水,但谁都没有察觉。等到她被救起,时间已经过去好几分钟,妞妞也已经陷入昏迷,没有呼吸和自主心跳。周围施救人员当即对她进行心肺复苏,同时家人拨打120。后来,妞妞终于恢复自主心跳。但由于在水中时间过长、缺氧太久以及池塘水质极差,妞妞肺部严重感染,出现高烧抽搐、脑损伤、脑水肿并多次休克,情况十分危急。第二天,妞妞从当地医院被紧急转运至浙大儿院PICU。在PICU医护人员的极力救治下,妞妞的肺部感染终于得到控制,高烧也逐渐退去,但大脑的不可逆永久性损伤。6月25日,江西余干4名孩童溺水身亡6月25日下午,江西上饶余干县信江沙港大桥附近水域,7个十多岁的孩子前往信江沙港大桥附近玩水,3个孩子没下水,在水边游玩,4个下水的孩子发生了溺水意外,搜救人员寻找到了3个孩子,均已不幸身亡。当地救援人员还在紧急搜救另一名失踪人员中。6月27日,记者采访获悉:失踪的孩子于6月26日下午被找到已不幸身亡。6月24日,四川中江一男孩溺水2人施救3人均不幸身亡四川德阳中江县警方25日发布通告:6月24日21时10分许,四川德阳市中江县公安局指挥中心接群众报警称,中江县南门汽车站外凯江河边有人溺水。三名溺水人员被救上岸后,医生现场全力救治并诊断,三人均无生命体征。经初步核查,冷某健(男,12岁)意外溺水后,冷某茂(男,58岁)与罗某华(男,37岁)下水施救,三人相继意外溺水身亡。此外6月22日安徽巢湖龟背潭3名学生下水游泳一人不幸溺亡;6月21日陕西西安一16岁少年溺亡;6月19日北京永定河多名儿童在水边玩耍时不慎落水3名儿童被水流冲走多人下水营救落水儿童最终全部得救但其中一位救人者周宏勃却再也没有回来……
过去六七年,广西柳州的覃女士经常奔波于柳州与河池的公检法机关之间。2015年,她经亲戚介绍,用自己和女儿名下的11套房产为一公司及该公司股东提供贷款担保,贷款支付后不久,该公司股东便将公司股权全部转让给他人,而且未能如约支付银行贷款利息。于是,银行将该公司、公司股东及担保人等诉至法院,要求清偿贷款及利息等,法院一审判决支持了银行的诉求。判决生效进入执行阶段后,法院发现该公司及股东并无可执行财产,覃女士提供的担保房产遂被查封。在这期间,察觉自己被骗且已无经济能力继续诉讼的覃女士在一审后没有选择上诉,而是向警方报案。经过数年周折,柳州市公安局柳南分局于2020年12月4日决定对覃女士被诈骗一案立案侦查。警方立案后,鉴于“先刑后民”的原则,法院暂停了对覃女士房产的执行,但2022年4月,法院又在覃女士房外张贴公告,再次启动强制执行程序。而此时,刑事案件尚未完结。覃女士遂再次向检察院反映,6月15日,覃女士接到检察院通知书,称已向法院提出检察建议。替人担保贷款致11套房产被查封2015年2月1日,覃女士与其亲戚王某歆签订借款合作协议,由王某歆“借”覃女士11套房产不动产权证,到邮储银行办抵押贷款。覃女士提供房产担保后,依约可从王某处获月利率1%的利息。王某歆为了证明贷款的目的,出示他与韦某花、钟某夫妇的企业宜州市鑫海养殖有限公司(简称鑫海公司)采购猪饲料、开办养老院、山林种植的“养殖场合作框架协议”。覃女士向澎湃新闻介绍,韦某花夫妇是王某歆妻子的亲戚。有了这层关系,覃女士当时并未多心。鑫海公司向中国邮政储蓄银行股份有限公司河池市分行(以下简称邮储银行)申请授信时,报称该公司自2012年至2014年度营业收入从143.8万元增至2649.35万元、净利润为742.36万元。同时还提供了柳州市伟桂贸易有限公司(简称伟桂公司)与鑫海公司签订《饲料购销合同》等资料。当年3月18日,邮储银行放贷,鑫海公司委托邮储银行,将460万元支付至伟桂公司单独开的银行账户中。两天后,鑫海公司股东韦某花同样用覃女士的房产作抵押担保,以装修的名义获取邮储银行贷款110万元。邮储银行贷款发放1个半月后,韦某花夫妇便将鑫海公司股权全部转让。当年9月,因鑫海公司和韦某花均逾期未还贷款,邮储银行诉至河池市金城江区法院。2015年12月,金城江区法院作出一审判决,支持了银行的诉求。法院判令银行与鑫海公司、韦某花签订的贷款合同解除,鑫海公司、韦某花应给付银行本金及相应利息,提供担保的覃女士及其女儿、王某歆承担连带清偿责任。在一审期间,覃女士发现上述贷款实际用途与贷款合同约定不符等等问题,察觉自己被骗,且已无经济能力继续诉讼,遂在一审后选择报警,并未上诉。一审判决生效后进入执行阶段,法院在执行调查中发现,鑫海公司名下无任何财产,其报称巨额营业收入及净利润更查不到任何线索。此后,覃女士及其女儿提供的担保的11套房产遂被查封。覃女士介绍,11套房产包括6个小摊位(商铺)、1个小公寓、4套住宅。2016年7月判决生效后,他们当时迫于银行压力,自己卖了一套住宅,替借款人偿还了172万元。因可能涉嫌诈骗,法院暂缓执行覃女士的代理律师通过调取银行流水账,发现鑫海公司及韦某从邮储银行获取贷款570万元,并没有用于采购猪饲料、开办养老院、山林种植或装修等项目。覃女士和律师均认为,王某歆和韦某花等人编造虚假经营项目,提供企业虚假材料、伪造《饲料购销合同》及装修合同,先后从邮储银行骗得贷款共计570万元,没有依约定使用贷款,而是将其瓜分、侵占,更未偿还银行分毫本息,侵害了担保合同一方覃女士提供担保的财产,涉嫌合同诈骗罪。此后,覃女士向警方报案。直到2017年12月,柳州市公安局银山分局才给覃女士出具了一份受案回执,但受案登记表显示,“该案件不属于我局管辖,应为邮储银行河池分行管辖地公安机关受理。目前,我局将覃女士提供的举报材料通过发放机要件方式邮寄给河池市公安局。”虽然警方未立即立案,但暂缓了法院的执行程序。2018年4月,金城江区法院委托评估机构,对覃女士提供担保的11套房产作了评估,即将进入拍卖程序。覃女士遂以警方已受理案件为由,向河池中院进行信访反映。2018年5月28日,河池中院向覃女士出具的答复函称,“2018年5月25日,金城江区法院将该案的执行情况及本院督办的办理情况书面报告本院,现就你反映的执行信访问题答复如下:鉴于上述两案可能涉嫌诈骗、贷款诈骗犯罪,金城江区法院已对你们用于抵押的房产暂缓拍卖。”2018年7月,金城江区法院作出的执行裁定书显示:“河池中院于2018年5月20日以《督办函》要求暂缓进入拍卖程序,根据督办要求先刑事后民事的原则,本院对该案抵押财产暂缓进入拍卖程序,此外,被执行人无其他可供执行财产,上述情况已告知申请执行人,现本案应该终结执行。”警方侦查期间,法院再启执行程序覃女士介绍,2018年7月法院终结该次执行后,她便一直为立案的事情到处奔波反映,2020年法院曾恢复过一次执行程序,但好在当年年底警方终于决定立案,执行程序才又暂停。2020年12月4日,柳州市公安局柳南分局出具的立案告知书显示,覃女士被诈骗一案,该局认为符合立案条件,现立案侦查。当年12月28日,金城江区法院出具的执行裁定书显示,因目前被执行人覃女士认为本案涉嫌犯罪问题在向公安机关进行控告,公安机关已立案侦查,目前暂不宜进行拍卖、变卖措施。经反馈约谈,申请执行人邮储银行河池分行不同意终结本次执行程序,但在指定期限内不能提供有其他财产可供执行。本次执行程序无法继续进行,可予以终结,需要等待继续执行的条件成就后再重新启动。不料,前述两次因“先刑后民”原则而终结的执行程序,在2021年却再次启动。2021年6月,邮储银行河池分行向金城江区法院提出执行异议,申请撤销上述2020年12月的终结本次执行裁定书,并申请立即恢复强制执行。2021年7月20日,金城江区法院作出执行裁定书,决定恢复执行。金城江区法院作出的执行裁定书显示,覃女士报案后,柳州市公安局柳南分局于2020年12月4日立案侦查,截至2021年7月16日,该案尚在侦查办理中。金城江区法院决定恢复执行的理由包括,公安机关虽已立案侦查,但并未确定本案抵押权存在瑕疵,本案抵押物为涉刑财产,(公安机关)也未对本案抵押物采取查封等控制措施等。2022年1月,覃女士向金城江区检察院提交了民事执行监督申请书,以金城江区法院作出的上述执行裁定存在程序违法、贷款纠纷案民事审判中存在认定事实不清、证据不足等问题。金城江区检察院于3月23日作出决定,受理了该执行监督案。日前,金城江区检察院向覃女士出具通知书称,该院经审查,已于6月14日以“金检民执监(2022)1号”检察建议书向金城江区法院提出检察建议。但检察建议具体内容,覃女士尚不得知。此外,覃女士还向河池银保监局举报反映了邮储银行河池分行存在违法发放贷款等问题,河池银保监局正在核查。
利用JS脚本从数组中随机取出多个不同的元素,其实非常的简单。只需要打要处理的数组进行打乱,然后在打乱的数组中截取指定的元素即可,下面是案例,大家可以参考一下。JS从数组中随机取出多个不同元素的方法1、定义一个打乱数组的方法functionshuffle(array){varm=array.length,t,i;//如果还剩有元素…while(m){//随机选取一个元素…i=Math.floor(Math.random()*m--);//与当前元素进行交换t=array[m];array[m]=array[i];array[i]=t;}returnarray;}2、调用打乱数组的方法arr=['1','2','3','4','5'];varmessage=shuffle(arr);console.log(message);打印结果:['4','2','3','5','1']3、数组已经被打乱,直接利用JS代码进行截取接口message=message.slice(0,3);//截取数组中的前三个元素console.log(message);//['4','2','3']完整的示例代码:/**JS打乱数组的函数*输入一个指定的数组*返回打乱元素的数组*站三界导航*zhansanjie.com*/functionshuffle(array){varm=array.length,t,i;//如果还剩有元素…while(m){//随机选取一个元素…i=Math.floor(Math.random()*m--);//与当前元素进行交换t=array[m];array[m]=array[i];array[i]=t;}returnarray;}//定义一个数组arr=['1','2','3','4','5'];//打乱数组中元素的排序varmessage=shuffle(arr);//截取打乱后的数组message=message.slice(0,3);console.log(message);
js中截取数组时要使用slice()方法,它可以从指定的数组中返回选定的元素,而不用改变原有的数组,非常的简单方便。js中slice()方法slice():从已有的数组中返回选定的元素,而不用改变原有的数组。语法:array.slice(start,end)参数:start:规定截取的位置,如为负数表示从数组的末尾开始。end:截取数组元素的结束位置,如不填写则表示整个数组,如为负数则表示从数组尾部开始,-1为最后一个,-2倒数第二个JS截取数组的方法下面列出几个使用jsslice()方法来截取数组的示例。例1:slice截取数组中的前三个元素vararr=["mochu","yueguang","zhansanjie.com","站三界导航","百度搜索","baidu.com"];//结束数组中的前三个元素varmyarr=arr.slice(0,3);console.log(myarr);//["mochu","yueguang","zhansanjie.com"]例2:slice截取数组中最后的二个元素varmyarr=arr.slice(-2);console.log(myarr);//['百度搜索','baidu.com']例3:slice截取数组中倒数第三个(截取)到最后一个(不截取)的元素varmyarr=arr.slice(-3,-1);['站三界导航','百度搜索']
1、js禁止alert弹窗的方法示例代码://feiniaomy.com王朝235网址导航//这是第一个弹窗alert('这是第一个弹窗');//禁止alert弹窗window.alert=function(){returnfalse;}//这是第二个弹窗,不会弹出的alert('这是第二个弹窗');2、js禁止alert弹出,并将内容写入到调试栏中示例代码://feiniaomy.com王朝235网址导航//这是第一个弹窗alert('这是第一个弹窗');//禁止alert弹窗window.alert=function(s){console.log(s);}//这是第二个弹窗,不会弹出的,但会以通过console打印出来alert('这是第二个弹窗');
示例代码:注:以下代码来自网络,稍微做了一些修改,已测试正常可用!/***判断输入的地址是否为顶级域名*站三界导航zhansanjie.com*是顶级域名返回true否则返回false**/functionis_url(str){str=str.toLowerCase();varhz='.com,.net,.org,.biz,.info,.name,.mobi,.tel,.xxx,.ac,.ag,.am,.asia,.at,.co,.be,.bz,.ca,.cc,.ch,.cm,.cx,.cz,.de,.ac.cn,.bj.cn,.sh.cn,.tj.cn,.cq.cn,.he.cn,.sx.cn,.nm.cn,.ln.cn,.jl.cn,.hl.cn,.js.cn,.zj.cn,.ah.cn,.fj.cn,.jx.cn,.sd.cn,.ha.cn,.hb.cn,.hn.cn,.gd.cn,.gx.cn,.hi.cn,.sc.cn,.gz.cn,.yn.cn,.xz.cn,.gs.cn,.qh.cn,.nx.cn,.xj.cn,.tw.cn,.mo.cn,.com.cn,.net.cn,.sn.cn,.org.cn,.hk.vc,.hk.cn,.sale,.wang,.xyz,.pro,.xin,.app,.vip,.top,.cn,.tv,.hk,.ng,.la,.in,.pw,.sx,.me,.gg,.gs,.st,.us,.dk,.ec,.es,.eu,.fm,.fr,.gd,.gl,.gr,.gy,.hn,.ht,.im,.io,.it,.je,.jp,.ki,.lc,.li,.lu,.lv,.md,.mg,.mn,.ms,.mu,.mx,.my,.nl,.nu,.pe,.ph,.pl,.pm,.se,.sh,.so,.tc,.tf,.tk,.tl,.tm,.to,.tw,.co.uk,.uk,.vc,.vg,.wf,.ws,.yt,.ltd,.men,.bid,.fi,.lt,.games,.news,.work,.space,.win,.link,.store,.co.jp,.edu,.ren,.date,.site,.red,.kim,.cn.com,.club,.gp,.is,.pt,.one,.tt,.ai,.ma,.ee,.su,.run,.car,.fish';hz=hz.split(",");varqm=str.substr(0,str.indexOf("\."));varhm=str.substr(str.indexOf("\."));returnstr.length>0&&hz.includes(hm)&&qm.match(/^[a-z0-9\u4e00-\u9fa5]+([a-z0-9\u4e00-\u9fa5-]*(?:[a-z0-9\u4e00-\u9fa5]+))?$/i)?true:false;}函数调用console.log(is_url('zhansanjie.com'));//trueconsole.log(is_url('zhansanjie.com/'));//falseconsole.log(is_url('zhansanjie.com/index.html'));//falseconsole.log(is_url('www.zhansanjie.com'));//false
本文主要总结了10个PHP特性,这些PHP特性对于PHP开发者来说都是应该学习和使用的,译文如下:1)标量类型声明(PHP7)PHP是一种松散类型的编程语言,因此没有提供任何指定输入参数类型和返回值类型的方法。PHP7通过以下语法改变了这个现象:functionadd(int$x,int$y):int{return$x+$y;}echoadd(1,2);有效类型为:类/接口名称,self,array(数组),callable(回调类型),bool(布尔型),float(浮点型),int(整型)和string(字符串)。2)—空接合操作符(PHP7)空接合操作符虽然小,但非常好用,是PHP7中新增加的。—只要操作符的左边存在且不为空,就返回左边,否则就返回操作符的右边://$aisnotdefined$b=NULL;$c="abc123";echo($a$b$c);//Result:abc1233)匿名类(PHP7)PHP7中还有一个新增的也很不错,那就是匿名类。有时候,我们只是没有必要创建一个命名的类,因为它的名字会导致当前命名空间的膨胀。语法非常简单:echo(newclass(){publicfunctionmyMethod(){return"Hello!";}})->myMethod();//Result:Hello!4)ReflectionReflection是一个用来获取有关运行时代码信息的强大框架。让你可以对类、接口、函数、方法和扩展执行反向工程,以构建映射引擎,IoC容器或文档框架等等。下面是一个获取匿名类所有方法的简单例子:$class=newReflectionClass(newclass(){publicfunctiongetText(){return"Hellofromanonymousclass";}});$methods=$class->getMethods();var_dump($methods);5)短数组初始化在用PHP编程的时候,我倾向于大量使用数组,因为它们不仅功能强大,而且简单易用。PHP的5.4.x版本使得更容易初始化:$myArray=["foo","name"=>"bar"];6)DateTime类PHP的5.2版本附带DateTime类作为首选的操纵和格式化日期和时间的方式。7)Lambda表达式/匿名函数匿名函数(有时也被称为lambda表达式)是没有指定名称的函数。匿名函数可以被分配给一个变量,如下例所示:$sayHi=function($toName){echo("Hi".$toName);};$sayHi("Peter");8)array_maparray_map是一个不错的函数,能帮助你对数组中的每个元素执行计算。这在混合了匿名函数/lambda表达式的时候特别好用。无论你为数组中的元素提供什么方法,array_map函数都适用:$nameLengths=array_map(function($item){returnstrlen($item);},["Sue","Peter","Michael"]);//Result:3,5,7需要注意的是,array_map可能会比foreach慢一点儿(特别当混合使用lambda表达式的时候更为明显),所以要慎用于那些非常大的数组。9)json_encode()和json_decode()我最近倾向于大量使用JSON序列化和反序列化。PHP的json_encode和json_decode函数对此提供了大力支持。需要注意的是,json_encode会忽略私有成员:classcar{public$make="Tesla";public$model="ModelS";private$errorCodes=['34343','545344'];}$carAsJson=json_encode(newcar());//Result:{"make":"Tesla","model":"ModelS"}10)密码的哈希(hashing)和验证PHP通过password_hash和password_verify函数,用一种安全的方式来大力支持密码的哈希和验证。因为使用非常简单,所以我们就没有必要重新发明轮子了。