PHP对程序员要求更高

首先,大家都知道,PHP也是一种编译型脚本语言,和其他的预编译型语言不同,它不是编译成中间代码,然后发布..而是每次运行都需要编译..

为此,也就有了一些OpcodeCache,比如开源的APC,eacc.还有商业的ZendO+等.

那么为什么PHP不把编译/执行分开呢?

PHP虽然是一种编译型脚本语言,但是它的编译速度非常快,它的编译不做任何语义优化,就是简单的忠实的把你所写的代码翻译成对应的Opcodes.而其他语言因为在编译器做很多的优化工作,会造成编译比较重,也一定程度上要求它们分离.

所以,理论上来说,通过编译执行分离,想达到源码加密,是不会有什么太大收效的,因为它很容易被反向.

另外,编译直接分离,并不会带来特别大的收益,反而会降低调试部署的效率(想想,修改,编译,发布,看效果),并且APC等OpcodeCache工具,已经很成熟了..

到这里,请大家注意这句:“它的编译不做任何语义优化”….

这也就是我为什么说,PHP对程序员的要求更高,不同于其他的编译型语言,PHP在编译的时候不会帮你做一些优化,比如对于如下的代码:

$j="laruence";

for($i=0;$i

}

如果是其他预编译语言,它的编译器也许会帮你做优化,把strlen提取到前面去,只做一次就够了.而对于PHP来说,它在编译的时候不做任何优化,也就是说,你的strlen,会忠实的被调用8次.

再比如:

$table="table";

while($i++

$sql="select*from".$table."whereid=".$i;

}

没错,“select*from”.$table会被concat1000次..

可见,PHP的程序员,需要认真的想好,你的代码会怎么被执行,你怎么写代码,最终的执行效率才最高.而不像其他的语言,程序员可以把一部分优化工作交给编译器.

这也就是我为什么说:”PHP对程序员的要求更高”的原因.当然,这个是好是坏,那就是见仁见智了。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181120A173SS00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券