php中的类和函数,以至于变量,在本质上都是C实现的, 你所编写的脚本,最终都会被转换成C代码来执行。 也许会有同学说了:不是转成opcode吗?问题是:opcode仅仅是一个中间代码,其最终还是要转成c代码来执行的。所以:php的最底层实现就是c代码。
正是因为php的实现是用c语言来实现的,所以下载到php源码后:我们也需要./configure,make,make install这几句来编译。这是因为c是一种编译型的语言。举一个不太恰当的例子:一个程序可以被做成:gui类型,console控制台类型。对于一个控制台程序,如果我们是用c/c++这种编译型语言书写的,其要最终发布是需要先编译的。编译完生成可执行程序之后:我们只需要每次执行时传递给它各种执行所需参数即可!对于php本身你也可以这么简单的理解:拿到php源码:我们需要编译一下,生成一个类似控制台程序,而后书写php脚本时:经过lex和yacc的编译过程:其转换为各种opcode命令,而这些命令最终转换为各种参数传入这个控制台程序来进行处理! 如果这么理解的话那什么都可以理解了:
比如说:为什么自己用c扩展实现一个php模块,为什么需要重新编译源码呢?因为这个模块是用c书写的,不编译过后根本无法执行,所以写过后需要将其放到php源码中,然后整个对包含这部分函数的php源码进行编译,生成可以执行的类似控制台程序。这样他就可以使用该模块中的函数了。
其实php扩展没有上边说的这么简单,但是大致原理差不多。关键是要记住一点:所有php底层实现本质上都是c语言!!既然是c,那要运行之前必然需要先先编译了。
(下边这段是我揣测的,没有任何依据)
那按照我的理解,php在编译阶段过后生成了各种opcode命令,一共有150种。而后需要执行命令分发过程到各个命令处理器上。那这各个命令处理器我们可以逻辑上认为是一个个的控制台可执行程序。从而每次执行一个php脚本时:先用c函数来对php语句执行编译,生成op_array.而后再将之分发给各个命令处理器来进行处理!
---------------------------------------------------------------------------------------------------------------------------------------------------
那现在的问题就是:
1:php语言怎么转成各种opcode的?
2:底层用c如何写php扩展?原理是什么?
问题1中的关键是:顶层的php是一种弱类型的语言,但是其底层实现是c语言,为强类型。 那弱类型是如何转成强类型的呢?这些下一篇博文再来解释。
(补充:对于在一个文件A中include/require另外一个文件B的查找顺序:
1:对于c/c++而言:是先在文件A的所在目录中查找,而后再去include_path中查找。
2:对于php而言:则恰恰相反,是先在include_path中查找,而后再去include_path中查找。
切记这两种查找方式的不同,不然在不同目录下编写两个同名文件时容易混淆到底是包含了哪一个进来···!)
分享到:
相关推荐
PHP实现英文标题的正确大写 PHP常用图片处理类 PHP常用测试函数 PHP得到当周每天日期 PHP文件下载类 PHP无限分类[左右值]算法 PHP显示日期、周几、农历初几、什么节日函数 PHP格式化数据,防止注入函数 PHP...
利用PHP中的GD库实现数字,字母,数字和字母的结合以及图片类型的验证码
PHP实现IP判断所在城市 内带QQ地址库
PHP实现将HTML页面生成图片
该类库实现PHP对TXT文档灵活的增删改查,让txt文档也可以充当数据库的角色。
php递归实现无限级分类库,感兴趣的朋友们可以下载下来,用到自己的项目中。
php递归实现无限级分类库,感兴趣的朋友们可以下载下来,用到自己的项目中。
通过指导和训练,希望证明开发 PHP 数学库并不是一项很难的任务,它可能代表一项有趣的技术和学习难题。在本文中将提供一个 PHP 数学库示例,名为 SimpleLinearRegression ,它演示了一个可以用来开发 PHP 数学库的...
PHP AMQP:一个纯PHP实现的AMQP库
jose-php, PHP JOSE库( JWT JWS JWE JWK JWK集JWK指纹) PHP ( Javascript对象签名和加密) 实现 要求phpseclib是必需的http://phpseclib.sourceforge.net示例 JWT编码$jwt = new JOSE_JWT(array
PHP实现柱形统计图实现,利用php gd库实现柱形统计图
PHP 库通过返回原始 SQL 来实现 ActiveRecord。为 PHP5.3 和 NO PDO 场景移植 yii2 ORM。
GD库是干什么用的呢!它是php处理图形的扩展库,GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。GD库在php中默认是没有开启的,如果想让它支持图片处理功能,那么就要手动开启GD库
本文讲的是mysql大数据分库和分表 php解决方案。 mysql分库分表方案、mysql 分库方案、php实现mysql分库分表、mysql高并发解决方案。
基于Linux环境下Apache、PHP及GD库的配置实现.pdf
主要的功能是实现PHP调用C++的动态库,C++动态库使用的是COM组件来创建的
PHP实现的验证码类库
微信第三方平台开发官方提供的工具库文件,主要用于提供满足与第三方平台服务器通信要求的PHP工具函数,可以直接调用进行加解密。 注意事项: 1.WXBizMsgCrypt.php文件提供了WXBizMsgCrypt类的实现,是用户接入企业...
通用试题库管理系统的设计与实现 通用试题库管理系统的设计与实现 通用试题库管理系统的设计与实现 通用试题库管理系统的设计与实现
Go sendmail 实现经典PHP发送邮件方法的Go库。不仅支持Sendmail,还同时支持其它MTAs, 如Postfix或sSMTP。