php中PECL和PEAR的关系

php中有两个概念:PEAR和PECL。这两个概念关系紧密,却又有着本质的区别。今天就试着把它们的关系讲讲清楚。

基本概念

PEAR的概念原文如下:

PEAR(PHP Extension and Application Repository) is a framework and distribution system for reusable PHP components.

我的理解是:PEAR是一个php可重用组件的框架和发布系统。

而PECL的概念原文如下:

PECL(The PHP Extension Community Library) is a repository for PHP Extensions, providing a directory of all known extensions and hosting facilities for downloading and development of PHP extensions.

大意是:PECL是一个管理php扩展的仓库。
除了这个概念,在PECL的官网主页上还有这么一句话:

The packaging and distribution system used by PECL is shared with its sister, PEAR.

直译为:PECL,和它的姊妹PEAR共同使用一个打包和发布系统。

二者关系

内容范围

在我看来,PECL更倾向于是php的扩展库。我们都知道php的扩展是使用c语言写的,在php编译之后,如果想动态的添加扩展,就只能单独编译,然后以动态链接库的形式加入php中。而无论是从概念,或是PECL中的内容来看,它都是php的扩展库。
回过头来看PEAR,它强调的是可重用组件,原文是extension and application。那在这里,我理解分为两个部分:

  1. extension:由C语言编写的php扩展(包括编译php时加入的和编译后以动态库形式加入的);
  2. application:有php语言自身编写的可重用包,比如说某些框架(CI)、某些DB操作类库(DBA)等等;

不过需要注意一点,我们一般是用的PEAR只包含第二部分application,而extension是放在PECL中的。
但是从概念所定义的范围上来说,我更倾向是PEAR包含PECL。

框架系统

从上文二者的定义可以看出:

  • PEAR明确指出是一种php可重用代码的框架和发布管理系统;
  • 而PCEL则是说,和PEAR共同使用一个打包和发布系统;

由此可见,很大可能这个公用的框架系统是由PEAR率先使用的,然后PECL由于某些原因,复用了这一套框架系统。

命令源码

我在我的mac上分别安装了这两个命令(pear 和 pecl),并对比了命令中的内容,不同之处在于:
在pear的最后一行为:

exec $PHP -C ··· -d open_basedir="" ··· -d auto_prepend_file="" -d auto_append_file="" $INCDIR/pearcmd.php "$@"



而在pecl的最后一行为:

exec $PHP -C  ···  $INCDIR/peclcmd.php "$@"



我将其中相同的部分省略,可以看出,除了2个配置项之外,最大的不同在于:$INCDIR/之后的文件。pear用的是pearcmd.php,而pecl用的是peclcmd.php。接着我们来对比下这两个文件。通过对比发现:peclcmd.php仅仅是定义了个PEAR_RUNTYPE之后,直接调用了pearcmd.php。

define('PEAR_RUNTYPE', 'pecl');                                                                                  @ini_set('allow_url_fopen', true);
require_once 'pearcmd.php';



这说明了什么我就不用多说了…

综上,我更倾向于:PEAR在概念上包含了两个部分,一个是PEAR真正的内容(由php代码编写的application)和PECL(由C语言编写的扩展)。PEAR概念上包含PECL,但在内容上和PECL互补,共同构成了PEAR的概念。但这仅仅是我个人的看法,其中可能也有很多我不知晓的渊源而导致事实并非如此。写此文章,也只是帮助我加深对两个概念的理解而已。
如果有任何不当之处,欢迎指出。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值