在Java中有*.jar(Java archive)文档,它的本质是能将多个文件压缩到单个文件,类似于rar或zip文件包,但是jar或war可以作为应用来执行。
在PHP5.3以后,PHP的phar扩展也可以实现Java这样的档案功能。它允许开发者创建或操作PHP档案文件,也就是名称的由来——PHP archive。
在下面的代码里,它包含了两个文件:wild.php和domestic.php。为了分发应用,需要分发3个文件。如果有更多的类,要分发文件的数量更多。只分发这两个文件的目的是:自身执行脚本,且phar文件包含了所有必要的类文件,如代码清单1-47所示:
代码清单1-47 使用phar引用文件
<?php include('phar://animals.phar/wild.php'); include('phar://animals.phar/domestic.php'); $test = animal(); printf("%s",$test->get_type()); $test1= new \wild\animal(); printf("%s",$test1->get_type()); ?>
上面代码的诀窍在于include指令,它引入了animals.phar文件并全部引用这些文件。
那么,我们讨论一下如何创建类文件?正如Java提供jar外部程序文件一样,PHP5.3也提供了称为phar的外部应用程序。
创建一个phar文件很简单,语法如下:
phar pack –f animals.phar –c gzwild.phpdomestic.php
pack参数指明了phar程序用来创建以-f选项指定的文件名的压缩档案包,并加入wild.php和domestic.php两个文件到压缩包中。为了能够成功运行,php.ini配置文件中的phar.readonly参数需为off,如果默认值为on,会阻止创建新档案。我们使用的压缩算法为zip,phar支持的压缩算法包括zip、gz(gzip)和bz2(bzip2)。
phar改变了PHP应用分发和打包的方式,并节省了存储空间。虽然不像命名空间或Nowdoc等特性那样吸引人注意,但对PHP应用分发方式开始有影响,比如一些主流开源程序如phpMyAdmin、WordPress等,都已经或开始尝试以phar方式发布。
与Java的jar包一样,亦无须担心性能问题,phar包只被解析一次。在脚本开始时间占得非常小,不影响执行时间。