[发泄贴] 原来 PHP 每一个子版本都是不同的语言……

2015-02-21 23:30:52 +08:00
 schezuk

PHP初学,把自己的代码部署到了一个叫做id666的免费空间,PHP版本是5.2.9
因为不想关心错误代码,于是自己封装了一个mysqli函数(我不是很懂PHP下类使用以及PDO……)
叫做safe_query()(见libMysqli.php,欢迎抓虫)


因为我要同时return整形值affected_rows和返回的数组
(update等sql语句不返回数据,所以affected_rows有必要)
因此我把查询后要返回的数组做引用传值safe_query($query, &$result, $bind_params = NULL)

然后他们告诉我$stmt->bind_param()第一个参数要传值,剩下的要传引用
我按要求封了一个array,第一个元素byVal,剩下的byRef,用call_user_func_array()传过去


结果他们又告诉我call_user_func_array()5.2版要传值,5.3版要传引用。
于是我还得作区分,抄了一个refValues($arr)按版本区分这个数组怎么传

我琢磨着这下大概可以兼容全部PHP5了吧~~~~


一个月以后,我又写了另一个项目,电脑重装之后顺便安了个WAMP(PHP5.5),打算本地调试
然后他喵的告诉我Fatal Error: Call-time pass-by-reference has been deprecated!!!!

DEPRECATED!!!!

你妹!

搜索了一下,说是allow_call_time_pass_reference = On可破

BULLSH***************T

PHP 5.4.0就已经REMOVED!一点渣都不剩了!

你叫我怎么版本兼容???你叫我怎么版本兼容???


谁能告诉我PHP这些版本到底是不是一个语言?!为什么朝三暮四这么严重?!翻脸不认人么?


还有json_encode,直到5.4.0才支持JSON_UNESCAPED_SLASHESJSON_UNESCAPED_UNICODE么?
满脸的\uHHHH,你知不知道你浪费了一倍空间?!居然要自己用回调pack每个匹配,简直酷炫!


以上纯属发泄,一开始用6年前版本的PHP就是我的不对。

说这么多就是想问问大家,目前大家的机器主要跑什么版本的PHP?^_^

7783 次点击
所在节点    PHP
76 条回复
nine
2015-02-22 05:01:46 +08:00
也许可以证明php正在大踏步前进。
经过若干个几斤版本之后,有可能会变成一门好用的语言。
schezuk
2015-02-22 07:25:12 +08:00
@gkuchan 正文三个意思:
秀无知(从第一行第一个字开始)
秀愚蠢(居然抱着旧版眼界狭窄)
发脾气(改动这么大就该叫PHP6)
然后请教朱军,PHP目标版本应该怎么选。
zts1993
2015-02-22 10:06:32 +08:00
对于一个版本之间兼容性高达99%以上的语言,你正好使用了那被废弃的1%,就说兼容性不好,也是醉了。。。。。
wdlth
2015-02-22 10:30:02 +08:00
你连版本之间的区别都没看就想着兼容?还总用那些旧的。你看看魔术引号被废弃后多少程序得重写。
chinvo
2015-02-22 10:47:26 +08:00
要在HHVM上部署的代碼本地用5.4,其他時間5.5。
樓主專門用些冷門的東西誒,PHP的文檔從5.2到5.5,出現無法兼容的變動的部分真的很少,主要都是些用起來有點費勁的玩意兒。
zsx
2015-02-22 10:52:19 +08:00
……写的PHP支持5.2到5.6,测试7和HHVM没问题的简直要哭瞎了?
一堆人在Windows下进行开发(好像很少见?),用IIS + PHP Manager进行版本测试。为了用PHPUnit、phpfmt等工具所以主PHP版本为5.6。

估计还是代码写的比较小心吧=.=
wulin
2015-02-22 10:52:25 +08:00
暂时是5.5, 新项目优先选择最新稳定版,除了性能提升,新加的语言特性也很方便,至少不用写array了233333333333
blue7wings
2015-02-22 11:24:30 +08:00
@kookxiang 我也特别喜欢这么用,array(),总感觉不够优雅。。
jamlee
2015-02-22 11:27:23 +08:00
php7 期待中 一直在关注鸟哥的微博。
jamlee
2015-02-22 11:27:49 +08:00
@xuhaoyangx 同样是推荐opcache
branchzero
2015-02-22 11:28:01 +08:00
写的项目如果是自用就不考虑兼容性了,直接最新稳定版走起。
之前做一个外包的时候客户环境是5.2(后来写完部署的时候才和我说,而且不能变),然后一通改,唉。。。
「PS:所以外包开发之前就应该和客户商量谈好环境,省的悲剧」

有变化才证明这个语言在不断进步吧。
版本更新之后变动比PHP还多的语言就更数不胜数了吧?
blue7wings
2015-02-22 11:28:28 +08:00
PHP 5.5.9,期待php7
jamlee
2015-02-22 11:29:53 +08:00
@zsx 已经对win累觉不爱了,只做代码写作平台,部署的不考虑
blue7wings
2015-02-22 11:30:25 +08:00
@branchzero +1,同觉得,有变化才有进步,像python2和python3的区别就更大了。
schezuk
2015-02-22 11:46:48 +08:00
@oott123 不用call_user_func怎么给要封装的函数传不定数量参数啊……
gkuchan
2015-02-22 12:03:55 +08:00
@schezuk 不明觉厉,我一个写Node的,天天笑看Node核心组撕逼,Node 1.0版本仍然难产。
xian366
2015-02-22 12:25:28 +08:00
话说可以用func_get_args()或者传一个数组过去,其实实现方式往往不是一种,如果搞不懂可以搜索下,新入门一个需要入乡随俗。
@schezuk
oott123
2015-02-22 12:32:40 +08:00
@schezuk 233 我都用数组传进去的 数组那么好用

不过特定的封装啊,插件啊这类机制不得不用当然没办法咯
schezuk
2015-02-22 12:41:14 +08:00
@xian366 @oott123 我封装的是mysqli_stmt::bind_parameter()
官方的api,它要我传给它两个以上的参数
第一个传值第二个以后传引用
oott123
2015-02-22 12:46:40 +08:00
没用过 MySQLi ,一般只用 pdo 。
不过看了看楼主说的那个函数,感觉这样的语法十分的别扭…想不出有什么非用这种函数不可的理由。
话说手册里也提示了有坑。

嘛…这倒是让我感受到了原来 mysqli 设计得如此神keng奇die…

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/172108

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX