[发泄贴] 原来 PHP 每一个子版本都是不同的语言…… - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
schezuk
V2EX    PHP

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

  •  
  •   schezuk 2015-02-21 23:30:52 +08:00 8385 次点击
    这是一个创建于 3944 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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?^_^

    76 条回复    2015-03-06 13:47:12 +08:00
    jsonline
        1
    jsonline  
       2015-02-21 23:55:37 +08:00
    PHP是最好的语言。(好到我学不会)
    结帖。
    gkuchan
        2
    gkuchan  
       2015-02-21 23:56:08 +08:00   7
    本文的意义是秀自己对PHP的无知?
    raincious
        3
    raincious  
       2015-02-22 00:10:59 +08:00   1
    不知道其他人怎么决定目标版本的,我自己目前将PHP自己的目标版本定为5.4,因为很多内核apt-get/yum拿不到最新的PHP 5.6哪怕5.5。

    5.2.9版本太旧了。如果你想使用新的语言特性,就不要使用那些低端的免费空间。(开个低端VPS随便也能闹得很欢)。

    另外,要针对接口编程,而不是针对实现编程。而且其实你其实需要在了解MySQLi之后为再为他封装操作类/函数,而不是设想好一个功能然后想方设法的向功能需求上靠近。

    关于“Fatal Error: Call-time pass-by-reference has been deprecated”这条提示我太喜欢了,有利于接口规范化。试想如果你的程序里一会儿是reference,一会儿不是,那么后期维护要麻烦死了。
    shiny
        4
    shiny  
    PRO
       2015-02-22 00:15:53 +08:00
    Python 2/3 才叫崩溃
    目前用 PHP5.4
    viko16
        5
    viko16  
       2015-02-22 00:16:47 +08:00
    不要对 5.3 以下的进行妥协,平时使用 5.4 ,尽量向 5.5/5.6 靠拢,心里憧憬着 7

    我自己是这样的 ^
    yangff
        6
    yangff  
       2015-02-22 00:17:46 +08:00 via Android   1
    直接返回一个array不就行了。。
    Actrace
        7
    Actrace  
       2015-02-22 00:18:55 +08:00
    服务器是最新版本php5.6.5
    kn007
        8
    kn007  
       2015-02-22 00:23:52 +08:00
    5.5.20记得是。。准备升到5.6了。。。正在更新函数
    msxcms
        9
    msxcms  
       2015-02-22 00:28:38 +08:00
    难道希望一个脚本语言6年不变?
    xuhaoyangx
        10
    xuhaoyangx  
       2015-02-22 00:38:49 +08:00   1
    php5.6+opcache值得一试。
    还是跟着新版走比较好。
    sumhat
        11
    sumhat  
       2015-02-22 00:45:55 +08:00
    楼主要稳定学 Java 吧,从 Java 5 到 Java 7 基本没有变 -_- (Java 5 是 10 多年前的事情了,去年刚出了 Java 8)
    arachide
        12
    arachide  
       2015-02-22 00:50:26 +08:00
    deprecated 多? cocoaer飘过
    bombless
        13
    bombless  
       2015-02-22 00:52:37 +08:00 via iPhone
    mysqli的这套绑定我以前用的时候的确感觉不太稳定

    不知道后续版本怎么样了。我用的时候5.5还没出来呢
    mhycy
        14
    mhycy  
       2015-02-22 00:57:40 +08:00
    后端服务器5.2 前端服务器5.3 本地5.2
    mhycy
        15
    mhycy  
       2015-02-22 00:59:12 +08:00
    补充:
    我现在都是随便给PDO打个包就直接用了。。。
    (主要是定义一些函数用于参数化查询)
    oott123
        16
    oott123  
       2015-02-22 01:29:49 +08:00 via Android
    我觉得楼主在用写 c 的心态写 php
    每门语言有自己的哲学…php 的 call user func 那函数反正我能不用就不用233
    Septembers
        17
    Septembers  
       2015-02-22 01:46:33 +08:00
    跟随PHP当前最新稳定版升级
    wezzard
        18
    wezzard  
       2015-02-22 02:27:02 +08:00
    一般用 RoR,永用最新的定版。
    kookxiang
        19
    kookxiang  
       2015-02-22 02:58:33 +08:00 via Android   2
    故意用[]‘表示数组,气死5.4以下用户
    msg7086
        20
    msg7086  
       2015-02-22 04:15:38 +08:00 via iPhone   1
    为什么不用adodb之类的抽象层呢
    nine
        21
    nine  
       2015-02-22 05:01:46 +08:00
    也许可以证明php正在大踏步前进。
    经过若干个几斤版本之后,有可能会变成一门好用的语言。
    schezuk
        22
    schezuk  
    OP
       2015-02-22 07:25:12 +08:00
    @gkuchan 正文三个意思:
    秀无知(从第一行第一个字开始)
    秀愚蠢(居然抱着旧版眼界狭窄)
    发脾气(改动这么大就该叫PHP6)
    然后请教朱军,PHP目标版本应该怎么选。
    zts1993
        23
    zts1993  
       2015-02-22 10:06:32 +08:00
    对于一个版本之间兼容性高达99%以上的语言,你正好使用了那被废弃的1%,就说兼容性不好,也是醉了。。。。。
    wdlth
        24
    wdlth  
       2015-02-22 10:30:02 +08:00
    你连版本之间的区别都没看就想着兼容?还总用那些旧的。你看看魔术引号被废弃后多少程序得重写。
    chinvo
        25
    chinvo  
       2015-02-22 10:47:26 +08:00
    要在HHVM上部署的代本地用5.4,其他5.5。
    主用些冷的西,PHP的文5.2到5.5,出法兼容的的部分真的很少,主要都是些用起有的玩意。
    zsx
        26
    zsx  
       2015-02-22 10:52:19 +08:00   1
    ……写的PHP支持5.2到5.6,测试7和HHVM没问题的简直要哭瞎了?
    一堆人在Windows下进行开发(好像很少见?),用IIS + PHP Manager进行版本测试。为了用PHPUnit、phpfmt等工具所以主PHP版本为5.6。

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

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

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

    嘛…这倒是让我感受到了原来 mysqli 设计得如此神keng奇die…
    zsx
        41
    zsx  
       2015-02-22 12:49:36 +08:00   1
    @jamlee 因为项目缘故是全平台支持的(其实也就Windows + Linux,其他的才懒得跑;就算是Linux也就跑跑CentOS和Ubuntu而已) + 自行封装各种数据库(8个)类 + 网络(3个)类 + 缓存(8个)类,几乎要把所有跨平台的坑都踩一遍了……
    chinvo
        42
    chinvo  
       2015-02-22 12:51:09 +08:00
    pdo,pdo大法好。
    bindarray、防注入、有象。
    jamlee
        43
    jamlee  
       2015-02-22 13:15:39 +08:00
    @zsx 辛苦辛苦啊 哈哈
    kmvan
        44
    kmvan  
       2015-02-22 13:45:08 +08:00 via Android
    任何软件都会不断发展的,并会抛弃落后时代的特性。
    正如 ie6 至 ie11 ,这是时代发展的需要
    qiuai
        45
    qiuai  
    PRO
       2015-02-22 13:48:40 +08:00
    用的好就别去追新.这是唯一的忠告.

    作为一个仍然在用PHP5.2的虚拟主机服务商,我想告诉你的是,并不是所有人和程序都已经准备好去PHP5.3甚至5.5了.

    这是一个悲伤的故事.
    wezzard
        46
    wezzard  
       2015-02-22 14:28:28 +08:00
    今天移代至Swift 1.2,:
    「原来 Swift 每一个子版本都是不同的语言……」
    schezuk
        47
    schezuk  
    OP
       2015-02-22 14:29:00 +08:00
    @qiuai 目前暂时要考虑兼容5.2.9-2和5.3.5,希望不会有什么问题吧……
    本地调试的WAMP已安PHP5.2到5.6全部,我已经无人可挡了!
    lianyue
        48
    lianyue  
       2015-02-22 15:48:27 +08:00
    hjc4869
        49
    hjc4869  
       2015-02-22 16:07:08 +08:00
    @kmvan IE11的企业模式可以兼容IE8。。别拿巨硬这一套兼容的程度来跟开源界比。。
    qiuai
        50
    qiuai  
    PRO
       2015-02-22 16:27:21 +08:00
    @schezuk 如果你不折腾,应该5.3到5.6的改变都不会影响到大部分业务的正常使用才对...
    neoblackcap data-uid=
        51
    neoblackcap  
       2015-02-22 16:37:14 +08:00
    @shiny 一般真写Python的人都不会觉得2,3另人很崩溃,我见过最多的是大家在吐槽Python 3(比如3.3的性能之类的问题)。说Python2,3兼容很大问题的一般多见于有老库不想更新不想投入时间维护的人。要知道Django这么大框架也可兼容2,3两个大版本,当然,就目前而已,科学计算领域的库还没有完全迁移。多使用Python2是真的。
    shiny
        52
    shiny  
    PRO
       2015-02-22 17:04:21 +08:00
    @neoblackcap I mean 用 PHP 写全版本兼容不是问题, python 就很难做到。
    脱离上下文来解读回帖会曲解原意。
    sarices
        53
    sarices  
       2015-02-22 17:17:32 +08:00
    虚拟主机一般都用5.2.x或者5.3.x,还有的用4呢,虚拟主机本来就很多用户,特别是已经很久的服务器,不会随随便便升级php版本的
    sarices
        54
    sarices  
       2015-02-22 17:18:33 +08:00
    还有一个就是务必保证开发环境和生产环境一致,虚拟机就是这个用的
    ShiningRay
        55
    ShiningRay  
       2015-02-22 18:22:13 +08:00
    PHP 有很多遗留问题,一点点解决也是好事
    schezuk
        56
    schezuk  
    OP
       2015-02-22 18:39:20 +08:00
    @qiuai
    问题是我现在需要从 PHP 5.2.9 迁移到 PHP 5.3.5……
    而且我找不到 PHP 5.4.0 以下版本的WAMPServer……
    qiuai
        57
    qiuai  
    PRO
       2015-02-22 18:43:29 +08:00
    schezuk
        58
    schezuk  
    OP
       2015-02-22 18:45:24 +08:00
    @qiuai 我安上了,不过好像config出了点问题……
    konakona
        59
    konakona  
       2015-02-22 18:47:06 +08:00
    那你不是要被python2.7会3.1虐死?
    其实php最大的几个版本分别是5.2 5.3 5.4

    之后的相对还好。

    你关注下这几个版本的新特性即可,尽可能用高版本。

    高的版本会禁止mysqli就说明它有一定缺陷,官方推荐使用pdo,mysql依然可用。
    qiuai
        60
    qiuai  
    PRO
       2015-02-22 18:53:48 +08:00
    @schezuk 我不在windows上跑PHP,所以不知道.你研究下看看.
    wdy1184
        61
    wdy1184  
       2015-02-22 19:47:27 +08:00
    PHP5.3以下就不要用了。
    neoblackcap
        62
    neoblackcap  
       2015-02-22 20:23:25 +08:00
    @shiny 我理解你说python的版本兼容跟php有差距,但是我只是觉得Python的版本兼容并没有你口中所说的那么严重,至少我没有遇到过因为Python3跟2而出现很大的兼容问题,可能也由于我都是写新代码的缘故吧。
    quericy
        63
    quericy  
       2015-02-22 20:40:56 +08:00
    主要还是用PHP 5.3和5.4的居多吧
    zhicheng
        64
    zhicheng  
       2015-02-22 21:42:20 +08:00 via Android
    我用的Python第三方依赖绝大多数都是同时兼任 2 和 3 的,Python 官方也同时维护两个版本,且在 2 上提供兼容 3 的方法,编程语言和标准函数库这种东西不怕大改,就怕每个小版本改来改去,改来改去,改来改去,改来改去。换我肯定不用了。。。
    opelnic
        65
    opelnic  
       2015-02-22 22:03:43 +08:00
    就当一门新的语言学学吧。
    服务器上面同时有5.2 5.3 5.4 5.5。有些老程序不能很好的和新版玩耍。
    invite
        66
    invite  
       2015-02-22 22:04:47 +08:00
    我从PHP到Python了,哈哈哈哈哈哈哈哈。

    PHP那帮人,思想太多,太杂,试图统一宇宙。
    c2q1989
        67
    c2q1989  
       2015-02-23 12:42:36 +08:00
    可以淘汰PHP5.4以下的版本了,毕竟网络编程发展太快,又不像C/C++这种面向机器的语言
    jacob
        68
    jacob  
       2015-02-23 16:08:56 +08:00
    @oott123 lz为什么不学下oo呢,我反正觉得oo很方便,重要的是我写得爽,效率不考虑,以我的水平还不需要省那点苍蝇腿。

    虽然不知道lz在写什么东西,为毛要用call_user_func那类的函数,那些劳什子本来就有很多兼容问题,否则各框架和类库也不会严重依赖php版本。

    哪个语言都有些G点,我的原则是绕着走。
    oott123
        69
    oott123  
       2015-02-23 17:03:42 +08:00
    @jacob 我不是楼主。
    Mars
        70
    Mars  
       2015-02-24 03:50:03 +08:00
    5.3.29....产生时不要用太新版本 ,太新的容易出问题。经验之谈。。。
    hitsmaxft
        71
    hitsmaxft  
       2015-02-24 09:48:45 +08:00 via iPhone
    5.2到5.3改变太多了,应该直接升大版本号才容易理解

    5.4,5.5 改动相对小。虽然也是存在兼容性问题
    Tuccuay
        72
    Tuccuay  
       2015-02-24 10:18:49 +08:00 via Android
    Tuccuay
        73
    Tuccuay  
       2015-02-24 10:21:36 +08:00 via Android
    @raincious 手机拿在手上过一会儿看发现创建了一条回复…抱歉
    lincanbin
        74
    lincanbin  
       2015-02-24 13:59:20 +08:00
    http://php.net/manual/en/migration53.php

    跨版本兼容要通过if和造轮子实现
    另外php 5.2到现在五六年了吧,贪便宜用免费空间也没办法
    picasso250
        75
    picasso250  
       2015-03-05 15:43:42 +08:00
    楼主,你去看看文档先好不好。楼上的文档你好好看看。要不然你就别用PHP了,c更适合你。
    yokle
        76
    yokle  
       2015-03-06 13:47:12 +08:00
    楼主在秀无知么?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     939 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 19:44 PVG 03:44 LAX 11:44 JFK 14:44
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86