官方提供的SDK只有一个文本消息功能,我们将所有消息的消息类型及事件响应都整理了进来,并且加入日志记录,代码如下:
<span 1</span> <?<span php </span><span 2</span> <span /*</span> <span 3</span> <span 方倍工作室 </span><span 4</span> <span CopyRight 2014 All Rights Reserved </span><span 5</span> <span */</span> <span 6</span> <span 7</span> <span define</span>("TOKEN", "weixin"<span ); </span><span 8</span> <span 9</span> <span $wechatObj</span> = <span new</span><span wechatCallbackapiTest(); </span><span 10</span> <span if</span> (!<span isset</span>(<span $_GET</span>['echostr'<span ])) { </span><span 11</span> <span $wechatObj</span>-><span responseMsg(); </span><span 12</span> }<span else</span><span { </span><span 13</span> <span $wechatObj</span>-><span valid(); </span><span 14</span> <span } </span><span 15</span> <span 16</span> <span class</span><span wechatCallbackapiTest </span><span 17</span> <span { </span><span 18</span> <span public</span> <span function</span><span valid() </span><span 19</span> <span { </span><span 20</span> <span $echoStr</span> = <span $_GET</span>["echostr"<span ]; </span><span 21</span> <span if</span>(<span $this</span>-><span checkSignature()){ </span><span 22</span> <span echo</span> <span $echoStr</span><span ; </span><span 23</span> <span exit</span><span ; </span><span 24</span> <span } </span><span 25</span> <span } </span><span 26</span> <span 27</span> <span private</span> <span function</span><span checkSignature() </span><span 28</span> <span { </span><span 29</span> <span $signature</span> = <span $_GET</span>["signature"<span ]; </span><span 30</span> <span $timestamp</span> = <span $_GET</span>["timestamp"<span ]; </span><span 31</span> <span $nonce</span> = <span $_GET</span>["nonce"<span ]; </span><span 32</span> <span $token</span> =<span TOKEN; </span><span 33</span> <span $tmpArr</span> = <span array</span>(<span $token</span>, <span $timestamp</span>, <span $nonce</span><span ); </span><span 34</span> <span sort</span>(<span $tmpArr</span>,<span SORT_STRING); </span><span 35</span> <span $tmpStr</span> = <span implode</span>(<span $tmpArr</span><span ); </span><span 36</span> <span $tmpStr</span> = <span sha1</span>(<span $tmpStr</span><span ); </span><span 37</span> <span 38</span> <span if</span>(<span $tmpStr</span> == <span $signature</span><span ){ </span><span 39</span> <span return</span> <span true</span><span ; </span><span 40</span> }<span else</span><span { </span><span 41</span> <span return</span> <span false</span><span ; </span><span 42</span> <span } </span><span 43</span> <span } </span><span 44</span> <span 45</span> <span public</span> <span function</span><span responseMsg() </span><span 46</span> <span { </span><span 47</span> <span $postStr</span> = <span $GLOBALS</span>["HTTP_RAW_POST_DATA"<span ]; </span><span 48</span> <span if</span> (!<span empty</span>(<span $postStr</span><span )){ </span><span 49</span> <span $this</span>->logger("R ".<span $postStr</span><span ); </span><span 50</span> <span $postObj</span> = <span simplexml_load_string</span>(<span $postStr</span>, 'SimpleXMLElement',<span LIBXML_NOCDATA); </span><span 51</span> <span $RX_TYPE</span> = <span trim</span>(<span $postObj</span>-><span MsgType); </span><span 52</span> <span 53</span> <span switch</span> (<span $RX_TYPE</span><span ) </span><span 54</span> <span { </span><span 55</span> <span case</span> "event": <span 56</span> <span $result</span> = <span $this</span>->receiveEvent(<span $postObj</span><span ); </span><span 57</span> <span break</span><span ; </span><span 58</span> <span case</span> "text": <span 59</span> <span $result</span> = <span $this</span>->receiveText(<span $postObj</span><span ); </span><span 60</span> <span break</span><span ; </span><span 61</span> <span case</span> "image": <span 62</span> <span $result</span> = <span $this</span>->receiveImage(<span $postObj</span><span ); </span><span 63</span> <span break</span><span ; </span><span 64</span> <span case</span> "location": <span 65</span> <span $result</span> = <span $this</span>->receiveLocation(<span $postObj</span><span ); </span><span 66</span> <span break</span><span ; </span><span 67</span> <span case</span> "voice": <span 68</span> <span $result</span> = <span $this</span>->receiveVoice(<span $postObj</span><span ); </span><span 69</span> <span break</span><span ; </span><span 70</span> <span case</span> "video": <span 71</span> <span $result</span> = <span $this</span>->receiveVideo(<span $postObj</span><span ); </span><span 72</span> <span break</span><span ; </span><span 73</span> <span case</span> "link": <span 74</span> <span $result</span> = <span $this</span>->receiveLink(<span $postObj</span><span ); </span><span 75</span> <span break</span><span ; </span><span 76</span> <span default</span>: <span 77</span> <span $result</span> = "unknow msg type: ".<span $RX_TYPE</span><span ; </span><span 78</span> <span break</span><span ; </span><span 79</span> <span } </span><span 80</span> <span $this</span>->logger("T ".<span $result</span><span ); </span><span 81</span> <span echo</span> <span $result</span><span ; </span><span 82</span> }<span else</span><span { </span><span 83</span> <span echo</span> ""<span ; </span><span 84</span> <span exit</span><span ; </span><span 85</span> <span } </span><span 86</span> <span } </span><span 87</span> <span 88</span> <span private</span> <span function</span> receiveEvent(<span $object</span><span ) </span><span 89</span> <span { </span><span 90</span> <span $content</span> = ""<span ; </span><span 91</span> <span switch</span> (<span $object</span>-><span Event) </span><span 92</span> <span { </span><span 93</span> <span case</span> "subscribe": <span 94</span> <span $content</span> = "欢迎关注方倍工作室 "<span ; </span><span 95</span> <span $content</span> .= (!<span empty</span>(<span $object</span>->EventKey))?("\n来自二维码场景 ".<span str_replace</span>("qrscene_","",<span $object</span>->EventKey)):""<span ; </span><span 96</span> <span break</span><span ; </span><span 97</span> <span case</span> "unsubscribe": <span 98</span> <span $content</span> = "取消关注"<span ; </span><span 99</span> <span break</span><span ; </span><span 100</span> <span case</span> "SCAN": <span 101</span> <span $content</span> = "扫描场景 ".<span $object</span>-><span EventKey; </span><span 102</span> <span break</span><span ; </span><span 103</span> <span case</span> "CLICK": <span 104</span> <span switch</span> (<span $object</span>-><span EventKey) </span><span 105</span> <span { </span><span 106</span> <span case</span> "COMPANY": <span 107</span> <span $content</span> = "方倍工作室提供互联网相关产品与服务。"<span ; </span><span 108</span> <span break</span><span ; </span><span 109</span> <span default</span>: <span 110</span> <span $content</span> = "点击菜单:".<span $object</span>-><span EventKey; </span><span 111</span> <span break</span><span ; </span><span 112</span> <span } </span><span 113</span> <span break</span><span ; </span><span 114</span> <span case</span> "LOCATION": <span 115</span> <span $content</span> = "上传位置:纬度 ".<span $object</span>->Latitude.";经度 ".<span $object</span>-><span Longitude; </span><span 116</span> <span break</span><span ; </span><span 117</span> <span default</span>: <span 118</span> <span $content</span> = "receive a new event: ".<span $object</span>-><span Event; </span><span 119</span> <span break</span><span ; </span><span 120</span> <span } </span><span 121</span> <span $result</span> = <span $this</span>->transmitText(<span $object</span>, <span $content</span><span ); </span><span 122</span> <span return</span> <span $result</span><span ; </span><span 123</span> <span } </span><span 124</span> <span 125</span> <span private</span> <span function</span> receiveText(<span $object</span><span ) </span><span 126</span> <span { </span><span 127</span> <span $keyword</span> = <span trim</span>(<span $object</span>-><span Content); </span><span 128</span> <span switch</span> (<span $keyword</span><span ) </span><span 129</span> <span { </span><span 130</span> <span case</span> "文本": <span 131</span> <span $content</span> = "这是个文本消息"<span ; </span><span 132</span> <span break</span><span ; </span><span 133</span> <span case</span> "图文": <span 134</span> <span case</span> "单图文": <span 135</span> <span $content</span>[] = <span array</span>("Title"=>"单图文标题", "Description"=>"单图文内容", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"<span ); </span><span 136</span> <span break</span><span ; </span><span 137</span> <span case</span> "多图文": <span 138</span> <span $content</span>[] = <span array</span>("Title"=>"多图文1标题", "Description"=>"", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"<span ); </span><span 139</span> <span $content</span>[] = <span array</span>("Title"=>"多图文2标题", "Description"=>"", "PicUrl"=>"http://d.hiphotos.bdimg.com/wisegame/pic/item/f3529822720e0cf3ac9f1ada0846f21fbe09aaa3.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"<span ); </span><span 140</span> <span $content</span>[] = <span array</span>("Title"=>"多图文3标题", "Description"=>"", "PicUrl"=>"http://g.hiphotos.bdimg.com/wisegame/pic/item/18cb0a46f21fbe090d338acc6a600c338644adfd.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"<span ); </span><span 141</span> <span break</span><span ; </span><span 142</span> <span case</span> "音乐": <span 143</span> <span $content</span> = <span array</span>("Title"=>"最炫民族风", "Description"=>"歌手:凤凰传奇", "MusicUrl"=>"http://121.199.4.61/music/zxmzf.mp3", "HQMusicUrl"=>"http://121.199.4.61/music/zxmzf.mp3"<span ); </span><span 144</span> <span break</span><span ; </span><span 145</span> <span default</span>: <span 146</span> <span $content</span> = "当前时间:".<span date</span>("Y-m-d H:i:s",<span time</span><span ()); </span><span 147</span> <span break</span><span ; </span><span 148</span> <span } </span><span 149</span> <span if</span>(<span is_array</span>(<span $content</span><span )){ </span><span 150</span> <span if</span> (<span isset</span>(<span $content</span>[0]['PicUrl'<span ])){ </span><span 151</span> <span $result</span> = <span $this</span>->transmitNews(<span $object</span>, <span $content</span><span ); </span><span 152</span> }<span else</span> <span if</span> (<span isset</span>(<span $content</span>['MusicUrl'<span ])){ </span><span 153</span> <span $result</span> = <span $this</span>->transmitMusic(<span $object</span>, <span $content</span><span ); </span><span 154</span> <span } </span><span 155</span> }<span else</span><span { </span><span 156</span> <span $result</span> = <span $this</span>->transmitText(<span $object</span>, <span $content</span><span ); </span><span 157</span> <span } </span><span 158</span> <span return</span> <span $result</span><span ; </span><span 159</span> <span } </span><span 160</span> <span 161</span> <span private</span> <span function</span> receiveImage(<span $object</span><span ) </span><span 162</span> <span { </span><span 163</span> <span $content</span> = <span array</span>("MediaId"=><span $object</span>-><span MediaId); </span><span 164</span> <span $result</span> = <span $this</span>->transmitImage(<span $object</span>, <span $content</span><span ); </span><span 165</span> <span return</span> <span $result</span><span ; </span><span 166</span> <span } </span><span 167</span> <span 168</span> <span private</span> <span function</span> receiveLocation(<span $object</span><span ) </span><span 169</span> <span { </span><span 170</span> <span $content</span> = "你发送的是位置,纬度为:".<span $object</span>->Location_X.";经度为:".<span $object</span>->Location_Y.";缩放级别为:".<span $object</span>->Scale.";位置为:".<span $object</span>-><span Label; </span><span 171</span> <span $result</span> = <span $this</span>->transmitText(<span $object</span>, <span $content</span><span ); </span><span 172</span> <span return</span> <span $result</span><span ; </span><span 173</span> <span } </span><span 174</span> <span 175</span> <span private</span> <span function</span> receiveVoice(<span $object</span><span ) </span><span 176</span> <span { </span><span 177</span> <span if</span> (<span empty</span>(<span $object</span>-><span Recognition)){ </span><span 178</span> <span $content</span> = <span array</span>("MediaId"=><span $object</span>-><span MediaId); </span><span 179</span> <span $result</span> = <span $this</span>->transmitVoice(<span $object</span>, <span $content</span><span ); </span><span 180</span> }<span else</span><span { </span><span 181</span> <span $content</span> = "你刚才说的是:".<span $object</span>-><span Recognition; </span><span 182</span> <span $result</span> = <span $this</span>->transmitText(<span $object</span>, <span $content</span><span ); </span><span 183</span> <span } </span><span 184</span> <span 185</span> <span return</span> <span $result</span><span ; </span><span 186</span> <span } </span><span 187</span> <span 188</span> <span private</span> <span function</span> receiveVideo(<span $object</span><span ) </span><span 189</span> <span { </span><span 190</span> <span $content</span> = <span array</span>("MediaId"=><span $object</span>->MediaId, "ThumbMediaId"=><span $object</span>->ThumbMediaId, "Title"=>"", "Description"=>""<span ); </span><span 191</span> <span $result</span> = <span $this</span>->transmitVideo(<span $object</span>, <span $content</span><span ); </span><span 192</span> <span return</span> <span $result</span><span ; </span><span 193</span> <span } </span><span 194</span> <span 195</span> <span private</span> <span function</span> receiveLink(<span $object</span><span ) </span><span 196</span> <span { </span><span 197</span> <span $content</span> = "你发送的是链接,标题为:".<span $object</span>->Title.";内容为:".<span $object</span>->Description.";链接地址为:".<span $object</span>-><span Url; </span><span 198</span> <span $result</span> = <span $this</span>->transmitText(<span $object</span>, <span $content</span><span ); </span><span 199</span> <span return</span> <span $result</span><span ; </span><span 200</span> <span } </span><span 201</span> <span 202</span> <span private</span> <span function</span> transmitText(<span $object</span>, <span $content</span><span ) </span><span 203</span> <span { </span><span 204</span> <span $textTpl</span> = "<span <xml> </span><span 205</span> <span <ToUserName><![CDATA[%s]]></ToUserName> </span><span 206</span> <span <FromUserName><![CDATA[%s]]></FromUserName> </span><span 207</span> <span <CreateTime>%s</CreateTime> </span><span 208</span> <span <MsgType><![CDATA[text]]></MsgType> </span><span 209</span> <span <Content><![CDATA[%s]]></Content> </span><span 210</span> </xml>"<span ; </span><span 211</span> <span $result</span> = <span sprintf</span>(<span $textTpl</span>, <span $object</span>->FromUserName, <span $object</span>->ToUserName, <span time</span>(), <span $content</span><span ); </span><span 212</span> <span return</span> <span $result</span><span ; </span><span 213</span> <span } </span><span 214</span> <span 215</span> <span private</span> <span function</span> transmitImage(<span $object</span>, <span $imageArray</span><span ) </span><span 216</span> <span { </span><span 217</span> <span $itemTpl</span> = "<span <Image> </span><span 218</span> <span <MediaId><![CDATA[%s]]></MediaId> </span><span 219</span> </Image>"<span ; </span><span 220</span> <span 221</span> <span $item_str</span> = <span sprintf</span>(<span $itemTpl</span>, <span $imageArray</span>['MediaId'<span ]); </span><span 222</span> <span 223</span> <span $textTpl</span> = "<span <xml> </span><span 224</span> <span <ToUserName><![CDATA[%s]]></ToUserName> </span><span 225</span> <span <FromUserName><![CDATA[%s]]></FromUserName> </span><span 226</span> <span <CreateTime>%s</CreateTime> </span><span 227</span> <span <MsgType><![CDATA[image]]></MsgType> </span><span 228</span> <span $item_str</span> <span 229</span> </xml>"<span ; </span><span 230</span> <span 231</span> <span $result</span> = <span sprintf</span>(<span $textTpl</span>, <span $object</span>->FromUserName, <span $object</span>->ToUserName, <span time</span><span ()); </span><span 232</span> <span return</span> <span $result</span><span ; </span><span 233</span> <span } </span><span 234</span> <span 235</span> <span private</span> <span function</span> transmitVoice(<span $object</span>, <span $voiceArray</span><span ) </span><span 236</span> <span { </span><span 237</span> <span $itemTpl</span> = "<span <Voice> </span><span 238</span> <span <MediaId><![CDATA[%s]]></MediaId> </span><span 239</span> </Voice>"<span ; </span><span 240</span> <span 241</span> <span $item_str</span> = <span sprintf</span>(<span $itemTpl</span>, <span $voiceArray</span>['MediaId'<span ]); </span><span 242</span> <span 243</span> <span $textTpl</span> = "<span <xml> </span><span 244</span> <span <ToUserName><![CDATA[%s]]></ToUserName> </span><span 245</span> <span <FromUserName><![CDATA[%s]]></FromUserName> </span><span 246</span> <span <CreateTime>%s</CreateTime> </span><span 247</span> <span <MsgType><![CDATA[voice]]></MsgType> </span><span 248</span> <span $item_str</span> <span 249</span> </xml>"<span ; </span><span 250</span> <span 251</span> <span $result</span> = <span sprintf</span>(<span $textTpl</span>, <span $object</span>->FromUserName, <span $object</span>->ToUserName, <span time</span><span ()); </span><span 252</span> <span return</span> <span $result</span><span ; </span><span 253</span> <span } </span><span 254</span> <span 255</span> <span private</span> <span function</span> transmitVideo(<span $object</span>, <span $videoArray</span><span ) </span><span 256</span> <span { </span><span 257</span> <span $itemTpl</span> = "<span <Video> </span><span 258</span> <span <MediaId><![CDATA[%s]]></MediaId> </span><span 259</span> <span <ThumbMediaId><![CDATA[%s]]></ThumbMediaId> </span><span 260</span> <span <Title><![CDATA[%s]]></Title> </span><span 261</span> <span <Description><![CDATA[%s]]></Description> </span><span 262</span> </Video>"<span ; </span><span 263</span> <span 264</span> <span $item_str</span> = <span sprintf</span>(<span $itemTpl</span>, <span $videoArray</span>['MediaId'], <span $videoArray</span>['ThumbMediaId'], <span $videoArray</span>['Title'], <span $videoArray</span>['Description'<span ]); </span><span 265</span> <span 266</span> <span $textTpl</span> = "<span <xml> </span><span 267</span> <span <ToUserName><![CDATA[%s]]></ToUserName> </span><span 268</span> <span <FromUserName><![CDATA[%s]]></FromUserName> </span><span 269</span> <span <CreateTime>%s</CreateTime> </span><span 270</span> <span <MsgType><![CDATA[video]]></MsgType> </span><span 271</span> <span $item_str</span> <span 272</span> </xml>"<span ; </span><span 273</span> <span 274</span> <span $result</span> = <span sprintf</span>(<span $textTpl</span>, <span $object</span>->FromUserName, <span $object</span>->ToUserName, <span time</span><span ()); </span><span 275</span> <span return</span> <span $result</span><span ; </span><span 276</span> <span } </span><span 277</span> <span 278</span> <span private</span> <span function</span> transmitNews(<span $object</span>, <span $newsArray</span><span ) </span><span 279</span> <span { </span><span 280</span> <span if</span>(!<span is_array</span>(<span $newsArray</span><span )){ </span><span 281</span> <span return</span><span ; </span><span 282</span> <span } </span><span 283</span> <span $itemTpl</span> = "<span <item> </span><span 284</span> <span <Title><![CDATA[%s]]></Title> </span><span 285</span> <span <Description><![CDATA[%s]]></Description> </span><span 286</span> <span <PicUrl><![CDATA[%s]]></PicUrl> </span><span 287</span> <span <Url><![CDATA[%s]]></Url> </span><span 288</span> <span </item> </span><span 289</span> "<span ; </span><span 290</span> <span $item_str</span> = ""<span ; </span><span 291</span> <span foreach</span> (<span $newsArray</span> <span as</span> <span $item</span><span ){ </span><span 292</span> <span $item_str</span> .= <span sprintf</span>(<span $itemTpl</span>, <span $item</span>['Title'], <span $item</span>['Description'], <span $item</span>['PicUrl'], <span $item</span>['Url'<span ]); </span><span 293</span> <span } </span><span 294</span> <span $newsTpl</span> = "<span <xml> </span><span 295</span> <span <ToUserName><![CDATA[%s]]></ToUserName> </span><span 296</span> <span <FromUserName><![CDATA[%s]]></FromUserName> </span><span 297</span> <span <CreateTime>%s</CreateTime> </span><span 298</span> <span <MsgType><![CDATA[news]]></MsgType> </span><span 299</span> <span <Content><![CDATA[]]></Content> </span><span 300</span> <span <ArticleCount>%s</ArticleCount> </span><span 301</span> <span <Articles> </span><span 302</span> <span $item_str</span><span </Articles> </span><span 303</span> </xml>"<span ; </span><span 304</span> <span 305</span> <span $result</span> = <span sprintf</span>(<span $newsTpl</span>, <span $object</span>->FromUserName, <span $object</span>->ToUserName, <span time</span>(), <span count</span>(<span $newsArray</span><span )); </span><span 306</span> <span return</span> <span $result</span><span ; </span><span 307</span> <span } </span><span 308</span> <span 309</span> <span private</span> <span function</span> transmitMusic(<span $object</span>, <span $musicArray</span><span ) </span><span 310</span> <span { </span><span 311</span> <span $itemTpl</span> = "<span <Music> </span><span 312</span> <span <Title><![CDATA[%s]]></Title> </span><span 313</span> <span <Description><![CDATA[%s]]></Description> </span><span 314</span> <span <MusicUrl><![CDATA[%s]]></MusicUrl> </span><span 315</span> <span <HQMusicUrl><![CDATA[%s]]></HQMusicUrl> </span><span 316</span> </Music>"<span ; </span><span 317</span> <span 318</span> <span $item_str</span> = <span sprintf</span>(<span $itemTpl</span>, <span $musicArray</span>['Title'], <span $musicArray</span>['Description'], <span $musicArray</span>['MusicUrl'], <span $musicArray</span>['HQMusicUrl'<span ]); </span><span 319</span> <span 320</span> <span $textTpl</span> = "<span <xml> </span><span 321</span> <span <ToUserName><![CDATA[%s]]></ToUserName> </span><span 322</span> <span <FromUserName><![CDATA[%s]]></FromUserName> </span><span 323</span> <span <CreateTime>%s</CreateTime> </span><span 324</span> <span <MsgType><![CDATA[music]]></MsgType> </span><span 325</span> <span $item_str</span> <span 326</span> </xml>"<span ; </span><span 327</span> <span 328</span> <span $result</span> = <span sprintf</span>(<span $textTpl</span>, <span $object</span>->FromUserName, <span $object</span>->ToUserName, <span time</span><span ()); </span><span 329</span> <span return</span> <span $result</span><span ; </span><span 330</span> <span } </span><span 331</span> <span 332</span> <span private</span> <span function</span> logger(<span $log_content</span><span ) </span><span 333</span> <span { </span><span 334</span> <span if</span>(<span isset</span>(<span $_SERVER</span>['HTTP_APPNAME'])){ <span //</span><span SAE</span> <span 335</span> sae_set_display_errors(<span false</span><span ); </span><span 336</span> sae_debug(<span $log_content</span><span ); </span><span 337</span> sae_set_display_errors(<span true</span><span ); </span><span 338</span> }<span else</span> <span if</span>(<span $_SERVER</span>['REMOTE_ADDR'] != "127.0.0.1"){ <span //</span><span LOCAL</span> <span 339</span> <span $max_size</span> = 10000<span ; </span><span 340</span> <span $log_filename</span> = "log.xml"<span ; </span><span 341</span> <span if</span>(<span file_exists</span>(<span $log_filename</span>) and (<span abs</span>(<span filesize</span>(<span $log_filename</span>)) > <span $max_size</span>)){<span unlink</span>(<span $log_filename</span><span );} </span><span 342</span> <span file_put_contents</span>(<span $log_filename</span>, <span date</span>('H:i:s')." ".<span $log_content</span>."\r\n",<span FILE_APPEND); </span><span 343</span> <span } </span><span 344</span> <span } </span><span 345</span> <span } </span><span 346</span> <span 347</span> <span 348</span> ?>

PHP는 현대적인 프로그래밍, 특히 웹 개발 분야에서 강력하고 널리 사용되는 도구로 남아 있습니다. 1) PHP는 사용하기 쉽고 데이터베이스와 완벽하게 통합되며 많은 개발자에게 가장 먼저 선택됩니다. 2) 동적 컨텐츠 생성 및 객체 지향 프로그래밍을 지원하여 웹 사이트를 신속하게 작성하고 유지 관리하는 데 적합합니다. 3) 데이터베이스 쿼리를 캐싱하고 최적화함으로써 PHP의 성능을 향상시킬 수 있으며, 광범위한 커뮤니티와 풍부한 생태계는 오늘날의 기술 스택에 여전히 중요합니다.

PHP에서는 약한 참조가 약한 회의 클래스를 통해 구현되며 쓰레기 수집가가 물체를 되 찾는 것을 방해하지 않습니다. 약한 참조는 캐싱 시스템 및 이벤트 리스너와 같은 시나리오에 적합합니다. 물체의 생존을 보장 할 수 없으며 쓰레기 수집이 지연 될 수 있음에 주목해야합니다.

\ _ \ _ 호출 메소드를 사용하면 객체를 함수처럼 호출 할 수 있습니다. 1. 객체를 호출 할 수 있도록 메소드를 호출하는 \ _ \ _ 정의하십시오. 2. $ obj (...) 구문을 사용할 때 PHP는 \ _ \ _ invoke 메소드를 실행합니다. 3. 로깅 및 계산기, 코드 유연성 및 가독성 향상과 같은 시나리오에 적합합니다.

섬유는 PHP8.1에 도입되어 동시 처리 기능을 향상시켰다. 1) 섬유는 코 루틴과 유사한 가벼운 동시성 모델입니다. 2) 개발자는 작업의 실행 흐름을 수동으로 제어 할 수 있으며 I/O 집약적 작업을 처리하는 데 적합합니다. 3) 섬유를 사용하면보다 효율적이고 반응이 좋은 코드를 작성할 수 있습니다.

PHP 커뮤니티는 개발자 성장을 돕기 위해 풍부한 자원과 지원을 제공합니다. 1) 자료에는 공식 문서, 튜토리얼, 블로그 및 Laravel 및 Symfony와 같은 오픈 소스 프로젝트가 포함됩니다. 2) 지원은 StackoverFlow, Reddit 및 Slack 채널을 통해 얻을 수 있습니다. 3) RFC에 따라 개발 동향을 배울 수 있습니다. 4) 적극적인 참여, 코드에 대한 기여 및 학습 공유를 통해 커뮤니티에 통합 될 수 있습니다.

PHP와 Python은 각각 고유 한 장점이 있으며 선택은 프로젝트 요구 사항을 기반으로해야합니다. 1.PHP는 간단한 구문과 높은 실행 효율로 웹 개발에 적합합니다. 2. Python은 간결한 구문 및 풍부한 라이브러리를 갖춘 데이터 과학 및 기계 학습에 적합합니다.

PHP는 죽지 않고 끊임없이 적응하고 진화합니다. 1) PHP는 1994 년부터 새로운 기술 트렌드에 적응하기 위해 여러 버전 반복을 겪었습니다. 2) 현재 전자 상거래, 컨텐츠 관리 시스템 및 기타 분야에서 널리 사용됩니다. 3) PHP8은 성능과 현대화를 개선하기 위해 JIT 컴파일러 및 기타 기능을 소개합니다. 4) Opcache를 사용하고 PSR-12 표준을 따라 성능 및 코드 품질을 최적화하십시오.

PHP의 미래는 새로운 기술 트렌드에 적응하고 혁신적인 기능을 도입함으로써 달성 될 것입니다. 1) 클라우드 컴퓨팅, 컨테이너화 및 마이크로 서비스 아키텍처에 적응, Docker 및 Kubernetes 지원; 2) 성능 및 데이터 처리 효율을 향상시키기 위해 JIT 컴파일러 및 열거 유형을 도입합니다. 3) 지속적으로 성능을 최적화하고 모범 사례를 홍보합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

드림위버 CS6
시각적 웹 개발 도구

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전
