codeless/jugglecode

用于操作脚本文件中PHP语句的工具

v1.0.0 2012-11-21 15:51 UTC

This package is not auto-updated.

Last update: 2023-09-16 07:50:29 UTC


README

JuggleCode 是一个用于操作脚本文件中PHP语句的工具。

特性

JuggleCode 可以

  • 将多个PHP文件合并到一个输出文件中
  • 从PHP文件中删除注释
  • 压缩或替换PHP脚本中的函数和方法调用

用法

JuggleCode 总是期望一个PHP脚本作为输入。默认情况下输出重定向到stdout,但也可以捕获到文件中。

示例:file1.php 和 file2.php 形成一个PHP应用程序,并且应该只在一个文件中(命名为 app.php)分发。

file1.php

<?php
# file1.php:
echo 'File 1',PHP_EOL;
require('file2.php');

file2.php

<?php
# file2.php:
echo 'File 2',PHP_EOL;

要将这两个文件合并到 app.php 中,需要编写一个简短的PHP脚本

require('vendor/codeless/jugglecode/src/JuggleCode.php');

$j = new JuggleCode();
$j->masterfile = 'file1.php';
$j->outfile = 'app.php';
$j->mergeScripts = true;
$j->run();

上述脚本的头三行可以合并为

$j = new JuggleCode('file1.php', 'app.php');

合并过程的结果将如下所示

<?php
# file1.php:
echo 'File 1',PHP_EOL;
# file2.php:
echo 'File 2',PHP_EOL;

请注意,当启用 --mergeScripts 时,只有被识别为PHP脚本(通过它们的扩展名)才会合并到输出文件中!扩展名为 .inc 的文件不会合并。

也可以只合并特定的文件。想象一下下面的 script.php

<?php
require('lib.php');
require('debug.php');
# ...

要仅将 script.php 与 lib.php 合并,运行

<?php
$j = new JuggleCode();
$j->masterfile = 'script.php';
$j->outfile = 'app.php';
$j->mergeFile('lib.php');
$j->run();

输出将是

<?php
# Contents of lib.php
# ...
require('debug.php');
# ...

即使启用 mergeScripts,也会保留文件的动态包含

# This will not change:
$file = 'somedata';
require($file . '.txt');

要禁用输出中的注释,使用

$j->comments = false;

压缩函数和方法调用

$j->oppressFunctionCall('str_replace'); # Oppress all calls to str_replace
$j->oppressMethodCall('$foo', 'foo'); # Oppress all calls to $foo->foo()
$j->oppressMethodCall('Foo', 'foo'); # Oppress all calls to Foo::foo()

替换函数和方法调用

# Replace all calls to str_replace with str_ireplace:
$j->replaceFunctionCall('str_replace', 'str_ireplace(%args%)');

# Replace all calls to $foo->foo() with foo():
$j->replaceMethodCall('$foo', 'foo', 'foo(%args%)');

安装

JuggleCode 可以通过 Packagist/Composer 轻松安装。

JuggleCode 使用想法

  • 将PHP应用程序部署为单个文件和不同版本:一个版本包含调试功能,另一个版本没有

JuggleCode 改进想法

  • 允许创建单个文件PHP补丁脚本,可以覆盖一个或多个其他PHP文件中的PHP语句
  • 压缩或替换函数或方法定义的主体(replaceMethodBody,replaceFunctionBody)
  • 通过将 JuggleCode 类分解成多个类来改进代码,例如一个用于方法,一个用于函数,等等。
  • 将 JuggleCode 转换为PHP扩展(参见PHP预处理器,如http://www.ohloh.net/p/pihipihttp://code.metala.org/p/ccpp
  • 查找空函数和方法;自动压缩那些定义以及调用
  • 从不可模板化的PHP脚本文件生成可模板化的脚本

JuggleCode 的替代方案

致谢和错误报告

JuggleCode 由 Codeless 编写(http://www.codeless.at/)。所有错误报告都可以发送到 more@codeless.at。更好的是,错误报告已发布在此软件包的 github-repository 上:https://www.github.com/codeless/jugglecode。如果没有 nikic 的 PHP-Parser 软件包,JuggleCode 就不可能实现:https://www.github.com/nikic/php-parser

授权

本作品采用 Creative Commons Attribution-ShareAlike 3.0 Unported License 授权: http://creativecommons.org/licenses/by-sa/3.0/deed.en_US