是,但我这个文章标题可不是和大家开玩笑.
首先,大家都知道,PHP也是一种编译型脚本语言,和其他的预编译型语言不同,它不是编译成中间代码,然后发布..而是每次运行都需要编译..
为此,也就有了一些OpcodeCache,比如开源的APC,eacc.还有商业的ZendO+等.
那么为什么PHP不把编译/执行分开呢?
PHP虽然是一种编译型脚本语言,但是它的编译速度非常快,它的编译不做任何语义优化,就是简单的忠实的把你所写的代码翻译成对应的Opcodes.而其他语言因为在编译器做很多的优化工作,会造成编译比较重,也一定程度上要求它们分离.
所以,理论上来说,通过编译执行分离,想达到源码加密,是不会有什么太大收效的,因为它很容易被反向.
另外,编译直接分离,并不会带来特别大的收益,反而会降低调试部署的效率(想想,修改,编译,发布,看效果),并且APC等OpcodeCache工具,已经很成熟了..
到这里,请大家注意这句:”它的编译不做任何语义优化”….
这也就是我为什么说,PHP对程序员的要求更高,不同于其他的编译型语言,PHP在编译的时候不会帮你做一些优化,比如对于如下的代码:
$j="laruence";
for($i=0;$istrlen($j);$i++){
}
如果是其他预编译语言,它的编译器也许会帮你做优化,把strlen提取到前面去,只做一次就够了.而对于PHP来说,它在编译的时候不做任何优化,也就是说,你的strlen,会忠实的被调用8次.
再比如:
$table="table";
while($i++){
$sql="select*from".$table."whereid=".$i;
}
没错,“select*from”.$table会被concat次..
可见,PHP的程序员,需要认真的想好,你的代码会怎么被执行,你怎么写代码,最终的执行效率才最高.而不像其他的语言,程序员可以把一部分优化工作交给编译器.
这也就是我为什么说:”PHP对程序员的要求更高”的原因.当然,这个是好是坏,那就是见仁见智了.
预览时标签不可点文章已于修改收录于话题#个上一篇下一篇