[月经] [借 PHP7 东风] 请从实际项目角度谈谈 PHP 到底哪里不好? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
loserwn
V2EX    问与答

[月经] [借 PHP7 东风] 请从实际项目角度谈谈 PHP 到底哪里不好?

  •  
  •   loserwn 2015-12-03 10:53:42 +08:00 3548 次点击
    这是一个创建于 3614 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

    首先说一下我自己的情况。用了 PHP 4 、 5 年了吧。一直觉的 PHP 还是比较不错的语言。可能是我做的项目都比较业务化,没有用到太多的底层和高深的技巧。所以,也没有遇到太多 PHP 的坑。

    我想没有一门语言是万能的。就如同没有一个系统架构是适合全部应用场景的。有些情况下 PHP 对于我来说可能是目前最合适的工具语言。(平日也写写 Python )

    昨日, PHP7 正式发布了。看到大家对这个事情反应大相径庭。「内核恐慌」中也经常拿 PHP 当个梗儿来提及。最近周围不少朋友都转了 Nodejs react 或者 Python 等等。难道 PHP 的社区开始日落西山了?

    我是个比较恋旧的人。不知道大家对这个事情怎么想?

    正文

    其实,就是想听听大家在自己实际的项目中,因为 PHP 语言或者框架,都遇到过哪些坑,最好是有具体的项目结合而不是就语言而语言谈。

    希望能够听到大家的声音。

    谢谢

    一个普通的 PHPer

    20 条回复    2015-12-04 10:47:34 +08:00
    oott123
        1
    oott123  
       2015-12-03 11:12:43 +08:00 via Android
    消息推送
    异步
    数据库连接池
    loserwn
        2
    loserwn  
    OP
       2015-12-03 11:31:17 +08:00
    @oott123 数据库连接池 一般是什么场景需要?
    tabris17
        3
    tabris17  
       2015-12-03 11:36:32 +08:00
    上下文环境无法跨请求,当然这是劣势也是优势
    loserwn
        4
    loserwn  
    OP
       2015-12-03 11:42:12 +08:00
    @tabris17 没太理解「上下文环境」这个定义,这是指什么?
    xujif
        5
    xujif  
       2015-12-03 11:54:26 +08:00
    @loserwn 简单说就是 php 一个请求一个上下文,没有真正意义上的 [全局] 变量。也没有真正意义上的单例、线程池。所有的东西都不能缓存。
    loserwn
        6
    loserwn  
    OP
       2015-12-03 11:59:30 +08:00
    @xujif 理解了。但是,常规其他 web 开发语言应该也有类似的问题吧。
    xujif
        7
    xujif  
       2015-12-03 12:03:24 +08:00   1
    @loserwn web 程序从运行状态分两种。
    application deployed in web server
    application run as web server
    只要是后者,基本都没有这个问题。如果是前者,也不一定有这个问题,主要是看 web 程序是否常驻内存。
    php 这个也不能说缺点,至少避免了内存泄露等问题。
    Zzzzzzzzz
        8
    Zzzzzzzzz  
       2015-12-03 12:08:30 +08:00
    补两条.

    作为一门自带电池的跨平台语言, 又没封装 pcntl 之类的具体平台相关实现.

    如果没靠谱的代码发布流程和编码规范, 那作为卖点的在线热修改很容易成为地雷.
    tabris17
        9
    tabris17  
       2015-12-03 12:11:24 +08:00
    @loserwn 全局变量
    flowerains
        10
    flowerains  
       2015-12-03 12:13:13 +08:00
    php 写了 3 年了,还真没有遇到迈不过去的坎,而且上手容易,就算是没写过 php 的人也能很容易的入门。
    最近在研究 ruby,想尝试尝试不同的脚本语言
    然而生产环境我还是选择 php
    xuxu
        11
    xuxu  
       2015-12-03 12:14:46 +08:00   1
    除了上面说的 我的理解:
    1. 钱少事多
    2. 装逼不够用
    3. 优点也是缺点
    lyragosa
        12
    lyragosa  
       2015-12-03 13:00:26 +08:00
    你们器材党有完没完啊!
    powtop
        13
    powtop  
       2015-12-03 13:15:38 +08:00
    开发者多,好招,易于产品快速迭代,不怕招不到人 即使在的情况下 n
    k9982874
        14
    k9982874  
       2015-12-03 13:23:02 +08:00
    上下文环境无法跨请求。一开始接触 PHP 是比较蛋疼的事,后来觉的也不错,就是觉得数据运行前要全部重装载一次有点蛋疼。

    全局变量。进程内 PHP 有 define 和 global 关键字,全局变量根本不是问题。

    跨进程的数据共享,数据缓存。有 memcached ,基本无痛。

    线程池。对于 PHP 来说就像问 linux 下多线程与多进程的优劣一样。当创建进程的开销和创建线程的开销差不多时,讨论线程和进程的优劣没啥意义。线程访问数据方便点,进程用完销毁对内存友好点。

    V 站很多 PYTHON , NODE.JS 优越党,但是无论怎么嘲讽 PHP 也改变不了 PHP 还是主流开发语言的事实。
    虽然现在很多站开始像 NODE 倾斜,但是真正要替换 PHP 个人认为还是不可能的。

    另外,个人觉得编程这个事是要有一定的沉积的, PHP 的用户群大部分可能是从 JAVA 和 C/C++来的。 NODE 大部分是从写页面的 JS 程序来的。
    就像 2 、 3 年前做页游的很多都是之前做 FLASH 动画,学了几天 AS 就说自己是程序员一样。一门语言的用户群决定了一门语言的生死存亡。只要社区大神不放弃 PHP ,也就不担心什么。

    最后撸主喜欢啥就用啥,不必过多考虑。
    loserwn
        15
    loserwn  
    OP
       2015-12-03 14:35:42 +08:00
    @xujif @Zzzzzzzzz @tabris17 @flowerains @xuxu @lyragosa @powtop @k9982874

    感谢各位回复。

    尤其感谢 @k9982874 的答疑解惑和安慰。俺踏实去撸代码了。
    shiny
        16
    shiny  
       2015-12-03 14:38:07 +08:00
    nodejs express 、 ruby sinatra 、 ROR 、 python 的 django 、 flask 、 tornado 都拿来写过项目,最后发现还是 PHP 省心点
    Zzzzzzzzz
        17
    Zzzzzzzzz  
       2015-12-03 15:16:23 +08:00
    @loserwn

    我理解的其他人说的全局的变量和 @k9982874 指的 global/define 应该指的不是同一件事.

    举个例子

    比如一个系统有一些设置很少变, 其他语言都可以在启动相应的容器 server 的时候获取这个变量, 每次请求都可以访问这个变量而不用再读取, 涉及到变化的话可以 subscribe zmq 或者 redis 之类的中间件进行推送通知.

    而除了 swoole 这类以外常规的 php 运行模式要么是每次获取都从 db 或者 memcached/redis 之类的缓存中间件读, 要么借助 shm/xcache(opcache 和后期版本的 eaccelerator 不行吧)进行本地缓存, 每次获取还得反序列化.
    ethego
        18
    ethego  
       2015-12-03 15:35:02 +08:00
    php 没法保存状态,需要依靠外部( mysql , redis )来做这些
    k9982874
        19
    k9982874  
       2015-12-03 15:39:07 +08:00
    @Zzzzzzzzz 所以我下面加了段跨进程的数据共享,补充全局变量部分。数据重装完成后使用起来就没啥不同了。而且 PHP 还可以根据需求只重装一部分数据,而不用所有数据全部重装。单进程服务器就没办法了,必须缓存住所以数据。
    loserwn
        20
    loserwn  
    OP
       2015-12-04 10:47:34 +08:00
    @shiny @Zzzzzzzzz @ethego @k9982874 谢谢各位解答
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2518 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 05:19 PVG 13:19 LAX 22:19 JFK 01:19
    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