文档章节

PHP对程序员的要求更高

周进
 周进
发布于 2013/07/11 23:05
字数 589
阅读 338
收藏 11

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

为此, 也就有了一些Opcode Cache, 比如开源的APC, eacc. 还有商业的Zend O+等.

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

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

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

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

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

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

$j = "laruence"; 
for ($i=0;$i<strlen($j);$i++) { 
}

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

再比如:

$table = "table"; 
while($i++ < 1000) { 
    $sql = "select * from " . $table . " where id = " . $i; 
}

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

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

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

© 著作权归作者所有

周进
粉丝 16
博文 35
码字总数 5679
作品 0
成都
CTO(技术副总裁)
私信 提问
加载中

评论(3)

theetc
theetc
不错
子曾今曰过了
子曾今曰过了
学习了!
HilerChen
HilerChen
长知识了,之前还真不知道!
PHP 对程序员的要求更高

今天是愚人节, 但我这个文章标题可不是和大家开玩笑. 首先, 大家都知道, PHP也是一种编译型脚本语言, 和其他的预编译型语言不同, 它不是编译成中间代码, 然后发布.. 而是每次运行都需要编译....

虫虫
2012/04/01
7.8K
29
西安佰登公司招聘php工程师

招聘php程序员 西安佰登网络科技有限公司www.whyyu.com,因业务拓展的需要,需要招收以下职位人员数名 详情如下: 职位名称: PHP程序员 职位要求: · 1到2年的Linux操作经验 · 1到2年的P...

LiLy169
2011/12/20
805
15
亮剑:PHP,我的未来不是梦(6)

1.1.2 三四流程序员的境界 对象:三四流程序员,也就是我们过去说的佃户,他们可以指挥手下的人为完成某种任务而工作。 在这个境界的程序员往往是从事PHP开发好几年了,从五流程序员上来的幸...

技术小牛人
2017/11/24
0
0
PHP十年,我是如何成为一个架构师的

身为一个做了十年开发的老司机程序员,我从一个菜鸟不断掉坑成长。这十年中获得了项目经理、CTO、大公司架构师的工作经历。其中的成长过程很艰辛,仔细一想这十年中我至少浪费了五年时间走了...

宋庆离
03/12
5.4K
0
6.1 Java vs php 优缺点、适用类型

1、上手难度比较 php易学易懂,非技术的人,稍稍学习,可以上手,环境搭建用LAMP/WAMP一键安装包,常见开发工具,phpstorm。 Java则要求理解,Java语法和核心架构(jar包)以及JVM,环境配置也...

产品经理的技术课堂
2018/05/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

关于AsyncTask的onPostExcute方法是否会在Activity重建过程中调用的问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/XG1057415595/article/details/86774575 假设下面一种情况...

shzwork
今天
7
0
object 类中有哪些方法?

getClass(): 获取运行时类的对象 equals():判断其他对象是否与此对象相等 hashcode():返回该对象的哈希码值 toString():返回该对象的字符串表示 clone(): 创建并返此对象的一个副本 wait...

happywe
今天
6
0
Docker容器实战(七) - 容器中进程视野下的文件系统

前两文中,讲了Linux容器最基础的两种技术 Namespace 作用是“隔离”,它让应用进程只能看到该Namespace内的“世界” Cgroups 作用是“限制”,它给这个“世界”围上了一圈看不见的墙 这么一...

JavaEdge
今天
8
0
文件访问和共享的方法介绍

在上一篇文章中,你了解到文件有三个不同的权限集。拥有该文件的用户有一个集合,拥有该文件的组的成员有一个集合,然后最终一个集合适用于其他所有人。在长列表(ls -l)中这些权限使用符号...

老孟的Linux私房菜
今天
7
0
面试套路题目

作者:抱紧超越小姐姐 链接:https://www.nowcoder.com/discuss/309292?type=3 来源:牛客网 面试时候的潜台词 抱紧超越小姐姐 编辑于 2019-10-15 16:14:56APP内打开赞 3 | 收藏 4 | 回复24 ...

MtrS
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部