当前位置:Gxlcms > PHP教程 > PHP的一些问题

PHP的一些问题

时间:2021-07-01 10:21:17 帮助过:2人阅读

今天被pdo的lastInsertId折腾了一下午,实在是醉了,使用exec执行insert导致lastInsertId返回的始终是0,必须使用prepare/execute才能正常获取。

好多时候都觉得PHP为什么这么随意啊,empty/isset/is_null,嘿,真TMD奇葩啊(我就爆粗了怎么了,不能忍)。可能是历史遗留原因,或者是有一些我不知道的原因请一定指出来,一直很奇怪当初设计的时候为什么不能是:is_empty/is_set/is_null,或者是:isEmpty/isSet/isNull?这样的例子还体现在str类函数上,这里面还有参数顺序的问题,比如str_replace目标字符串在后面,substr/strpos在前面,我就想问下,一门语言怎么能随意到这种程度呢?

另外还有类型转换,每次拿到用户传过来的值都有点怕怕呢,很多方法不加strict都不敢用呢,我问你为什么这样,你说:因为我“弱”啊!你看只要你不用===,判断我都可以一溜烟跑下去呢!

剩下就是异常,可预见性的要么是exit/die,高大上一点的就用Exception,不过大多数Exception还要我自己抛呢。这还没完,大人您还有error呢,还有等级呢,异常还捕获不到呢,要做跳板呢。

回复内容:

今天被pdo的lastInsertId折腾了一下午,实在是醉了,使用exec执行insert导致lastInsertId返回的始终是0,必须使用prepare/execute才能正常获取。

好多时候都觉得PHP为什么这么随意啊,empty/isset/is_null,嘿,真TMD奇葩啊(我就爆粗了怎么了,不能忍)。可能是历史遗留原因,或者是有一些我不知道的原因请一定指出来,一直很奇怪当初设计的时候为什么不能是:is_empty/is_set/is_null,或者是:isEmpty/isSet/isNull?这样的例子还体现在str类函数上,这里面还有参数顺序的问题,比如str_replace目标字符串在后面,substr/strpos在前面,我就想问下,一门语言怎么能随意到这种程度呢?

另外还有类型转换,每次拿到用户传过来的值都有点怕怕呢,很多方法不加strict都不敢用呢,我问你为什么这样,你说:因为我“弱”啊!你看只要你不用===,判断我都可以一溜烟跑下去呢!

剩下就是异常,可预见性的要么是exit/die,高大上一点的就用Exception,不过大多数Exception还要我自己抛呢。这还没完,大人您还有error呢,还有等级呢,异常还捕获不到呢,要做跳板呢。

不要遇了点挫折就全盘否定好不好。被PDO折腾一下下午说明你对PHP还不够熟悉而已,就算不熟悉,难道没有手册,不会百度吗,网上找一个完整可用的例子看完再写不行?这也能怪PHP?用句潮语来说:“我也是醉了”。要多点从自己身上找问题好吗?

你说的函数名不统一、比较乱等问题,本身就是有它的历史原因,PHP的使用者众多,很多东西不是说改就改的。当然随着时间推移,我们现在慢慢看到PHP在不断进步,PHP7.0也即将发布了,它所做的性能优化和新添加的特征,都是值得我们期待的。

以前也用过JAVA,现在用PHP也差不多3年了,也没有感觉弱类型有什么不好的,习惯了你就完全可以把控它。

有时候,发发牢骚没关系,特别是不熟悉的时候都容易这样。但一门语言你既然选择它,就是看中它的优势来的。老是盯着它的不好还怎么学、怎么进步。如果觉得它哪里不好,自己可以尝试找办法去解决或者弥补它的不好,当然前提是你花更多时间去了解它。

既然举报我答非所问,我就改一下吧。重新看了一遍题主的问题,一大堆吐槽里面夹着一句问题:“我就想问下,一门语言怎么能随意到这种程度呢?”感觉题主是来求认同的而不是来求解惑的。很想反问题主:提问题怎么可以随意到这种程度呢?

PHP语言的高度不一致性的确让很多人吐槽过了,这是事实,而造成这一现状的根本原因是PHP压根儿就不是一门设计出来的语言,而是一门成长出来的语言。

当年是一个哥们儿觉得CGI写Web服务器程序太麻烦了,然后就自己折腾出了一个开发个人网站的工具包,后来丢到了开源社区,社区上的人们都觉得这个工具包还不错,于是你加一点功能,我加一点功能地扩展这个工具包,最后演化成了PHP语言。早期PHP就是Personal Home Page的缩写,后来为了赶时髦才改成了回文式的PHP: Hypertext Preprocessor。

像Ruby、Python或者C#这些语言,都是由颇具经验的软件开发人员精心设计而来的。一开始就是为了做出一种适用于某些场景的程序设计语言,语言一致性高,语法设计精妙,处处闪烁着设计者的智慧和经验。而且这些语言从发布之日起就一直是官方团队领头开发,社区贡献的代码都需要经过严格审核才能进入核心版本库。

然而早期的PHP根本没有所谓核心开发组,大家在各个技术新闻组上交流意见,用FTP分享代码。PHP解释器是用C写的,大家纷纷把各种C语言的代码库包装成PHP语言的函数,于是也保留下来各种流派的函数命名规则。后来甚至就连最早开发和发布PHP的那哥们儿也不管了,一直到3.0版时,社区才有了几个人组成核心团队来发布官方版本,然而他们更主要的工作是协调社区意见和提供bug跟踪。PHP的面向对象模型更是到了5.0时代才由Zend公司的开发者做出来。

是不是觉得非常乱?告诉你一个事实:不光PHP,整个Web世界就是一片混乱中搞出来的。你看HTML里的标签,为什么有全写也有缩写,</code>这种写法和<code><img></code>、<code><ul></code>这种写法并存?因为HTML发展之初也是没标准的,早期有过<code><img src="https://www.gxlcms.com/xxx"></code>的写法,也有过<code><image href="https://www.gxlcms.com/xxxx"></code>的写法,不同的个人开发者给出不同的实现罢了,直到有一天,支持第一种写法的浏览器成为绝对主流了,于是才有了标准。</p> <p>PHP一直是典型的自由软件的运作方式,先有大家的自由改进,然后互取所长,然后攒出一个较优选择成为官方,然而大把多人在官方基础之上自己改东西,有一些有幸被官方收纳到未来版本人,有一些就沉没了。</p> <p>那么怎么解决乱这个问题呢?许多人都提出了解决方案,比如把命名不一致的函数封装到框架里,把empty之类的像函数而又不是函数的语法也封到框架里,把一切混乱包起来,只对开发者暴露出优雅的部分。然而现实情况是PHP语言领域没有一套唯一的框架,世界上的知名PHP开发框架不下20种,各公司各团队自己库和框架更是海了去了。</p> <p>PHP最后就和C语言一样,只能靠人来解决这个问题——别写烂代码,尽管语言允许你乱写——选择一种大家喜欢的语言风格,定为团队标准,然后执行它。还有,用一个好的IDE,自动完成提示能把你从记忆各种不同风格的函数中解放出来。 </div> <div class=""> <ul class="m-news-opt fix"> <li class="opt-item"> <a href='/PHPjiqiao-100860.html' target='_blank'><p>< 上一篇</p><p class="ellipsis">mysql-php在linux后台定时运行的脚本有哪些?</p></a> </li> <li class="opt-item ta-r"> <a href='/PHPjiqiao-100862.html' target='_blank'><p>下一篇 ></p><p class="ellipsis">php的正则闭包500错误!快来看看啊!!</p></a> </li> </ul> </div> </div> </div> <div class="g-title fix"> <h2 class="title-txt">人气教程排行</h2> </div> <div class="m-rank u-dashed mb40"> <ul> <li class="rank-item"> <a href="/PHPjiqiao-379253.html" title='php如何获取跳转前的url' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">174次</span> <span class="g-sort-num top">1</span> php如何获取跳转前的url </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-379019.html" title='php格林威治时间转换成当前时间的方法' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">174次</span> <span class="g-sort-num second">2</span> php格林威治时间转换成当前时间的方法 </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-366629.html" title='为什么php不能做大型系统?' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">174次</span> <span class="g-sort-num third">3</span> 为什么php不能做大型系统? </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-207623.html" title='range函数怎么用' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">174次</span> <span class="g-sort-num ">4</span> range函数怎么用 </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-162433.html" title='php中计算页面加载时间几种方法总结_PHP教程' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">174次</span> <span class="g-sort-num ">5</span> php中计算页面加载时间几种方法总结_PHP教程 </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-140221.html" title='求帮助,关于paypal支付返回值修改订单状态' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">174次</span> <span class="g-sort-num ">6</span> 求帮助,关于paypal支付返回值修改订单状态 </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-103588.html" title='typecho怎么配置文章内容页?' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">174次</span> <span class="g-sort-num ">7</span> typecho怎么配置文章内容页? </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-99213.html" title='PhpStorm左侧structure不显示文件的方法列表是这么回事?' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">174次</span> <span class="g-sort-num ">8</span> PhpStorm左侧structure不显示文件的方法列表是这么回事? </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-92208.html" title='查看PHP的环境变量_PHP' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">174次</span> <span class="g-sort-num ">9</span> 查看PHP的环境变量_PHP </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-170.html" title='PHP Primary script unknown 解决方法总结' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">174次</span> <span class="g-sort-num ">10</span> PHP Primary script unknown 解决方法总结 </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-148.html" title='php的命名空间与自动加载实现方法' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">174次</span> <span class="g-sort-num ">11</span> php的命名空间与自动加载实现方法 </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-133.html" title='解决laravel 出现ajax请求419(unknown status)的问题' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">174次</span> <span class="g-sort-num ">12</span> 解决laravel 出现ajax请求419(unknown status)的问题 </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-462817.html" title='php 如何删除mysql记录' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">173次</span> <span class="g-sort-num ">13</span> php 如何删除mysql记录 </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-388448.html" title='PHP如何替换数组中的指定元素' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">173次</span> <span class="g-sort-num ">14</span> PHP如何替换数组中的指定元素 </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-124270.html" title='怎么去除字符串中非汉字、非字母、非数字的字符' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">173次</span> <span class="g-sort-num ">15</span> 怎么去除字符串中非汉字、非字母、非数字的字符 </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-112291.html" title='mysql如何一次执行多条SQL语句' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">173次</span> <span class="g-sort-num ">16</span> mysql如何一次执行多条SQL语句 </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-110669.html" title='修改header里面的Connection为close解决方法' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">173次</span> <span class="g-sort-num ">17</span> 修改header里面的Connection为close解决方法 </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-153.html" title='PHP基于session.upload_progress 实现文件上传进度显示功能详解' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">173次</span> <span class="g-sort-num ">18</span> PHP基于session.upload_progress 实现文件上传进度显示功能详解 </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-125.html" title='php5.6.x到php7.0.x特性小结' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">173次</span> <span class="g-sort-num ">19</span> php5.6.x到php7.0.x特性小结 </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-378118.html" title='php为什么会出现504错误' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">172次</span> <span class="g-sort-num ">20</span> php为什么会出现504错误 </a> </li> </ul> </div> </div> </div> <!-- / 教程内容页 --> </div> </div> <!-- 页尾 --> <div class="footer"> 本站所有资源全部来源于网络,若本站发布的内容侵害到您的隐私或者利益,请联系我们删除!</div> <!-- / 页尾 --> <script type="text/javascript" src="/kan/js/read.js"></script> <div style="display:none"> <div class="login-box" id="login-dialog"> <div class="login-top"><a class="current" rel="nofollow" id="login1" onclick="setTab('login',1,2);" >登录</a></div> <div class="login-form" id="nav-signin"> <!-- <div class="login-ico"><a rel="nofollow" class="qq" id="qqlogin" target="_blank" href="/user-center-qqlogin.html"> QQ </a></div> --> <div class="login-box-form" id="con_login_1"> <form id="loginform" action="/user-center-login.html" method="post" onsubmit="return false;"> <p class="int-text"> <input class="email" id="username" name="username" type="text" value="用户名或Email" onfocus="if(this.value=='用户名或Email'){this.value='';}" onblur="if(this.value==''){this.value='用户名或Email';};" ></p> <p class="int-text"> <input class="password1" type="password" id="password" name="password" value="******" onBlur="if(this.value=='') this.value='******';" onFocus="if(this.value=='******') this.value='';" > </p> <p class="int-info"> <label class="ui-label"> </label> <label for="agreement" class="ui-label-checkbox"> <input type="checkbox" value="" name="cookietime" id="cookietime" checked="checked" value="2592000"> <input type="hidden" name="notforward" id="notforward" value="1"> <input type="hidden" name="dosubmit" id="dosubmit" value="1">记住我的登录 </label> <a rel="nofollow" class="aright" href="/user-center-forgetpwd.html" target="_blank"> 忘记密码? </a></p> <p class="int-btn"><a rel="nofollow" id="loginbt" class="loginbtn"><span>登录</span></a></p> </form> </div> <form id="regform" action="/user-center-reg.html" method="post"> <div class="login-reg" style="display: none;" id="con_login_2"> <input type="hidden" name="t" id="t"/> <p class="int-text"> <input id="email" name="email" type="text" value="Email" onfocus="if(this.value=='Email'){this.value='';}" onblur="if(this.value==''){this.value='Email';};"></p> <p class="int-text"> <input id="uname" name="username" type="text" value="用户名或昵称" onfocus="if(this.value=='用户名或昵称'){this.value='';}" onblur="if(this.value==''){this.value='用户名或昵称';};"></p> <p class="int-text"> <input type="password" id="pwd" name="password" value="******" onBlur="if(this.value=='') this.value='******';" onFocus="if(this.value=='******') this.value='';"> </p> <p class="int-text1"><span class="inputbox"> <input id="validate" name="validate" type="text" value="验证码" onfocus="if(this.value=='验证码'){this.value='';}" onblur="if(this.value==''){this.value='验证码';};"> </span><span class="yzm-img"><img src="/user-checkcode-index" alt="看不清楚换一张" id="indexlogin"></p> <p class="int-info"> <label> <input value="" name="agreement" id="agreement" CHECKED="checked" type="checkbox"> 我已阅读<a rel="nofollow" href="/user-center-agreement.html">用户协议</a>及<a rel="nofollow" href="/user-center-agreement.html">版权声明</a></label> </p> <p class="int-btn"><input type="hidden" name="dosubmit"/> <a rel="nofollow" class="loginbtn" id="register"><span>注册</span></a></p> </div> </form> </div> </div> </div> </div> <script type="text/javascript" src="/kan/js/foot_js.js"></script> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?6dc1c3c5281cf70f49bc0bc860ec24f2"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> <script type="text/javascript" src="/layui/layui.js"></script> <script> layui.use('code', function() { layui.code({ elem: 'pre', //默认值为.layui-code about: false, skin: 'notepad', title: 'php怎么实现数据库验证跳转代码块', encode: true //是否转义html标签。默认不开启 }); }); </script> </body> </html>