V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
schezuk
V2EX  ›  PHP

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

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

    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  
       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大法好。
    bind傳array、防注入、有對象。
    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  
       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  
       2015-02-22 16:27:21 +08:00
    @schezuk 如果你不折腾,应该5.3到5.6的改变都不会影响到大部分业务的正常使用才对...
    neoblackcap
        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  
       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  
       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  
       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   ·   我们的愿景   ·   实用小工具   ·   1105 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 22:40 · PVG 06:40 · LAX 15:40 · JFK 18:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.