从 PHP 中的原始类文件生成原型类


Generate prototype classes from orginal class files in PHP

PHP中有什么方法可以读取包含一个或多个类的php源文件,然后创建一个原型类(类似于接口(

原始类如下所示:

class Math {
    private $a;
    private $b;
    public function set_a($a) {
        $this -> a = $a;
    }
    public function set_b($b) {
        $this -> b = $b;
    }
    public function sum() {
        return $a + $b;
    }
}

原型文件必须如下所示:

class Math {
    public function set_a($a) { }
    public function set_b($b) { }
    public function sum() { }
}

我想通过在运行时读取类文件并生成原型类来动态执行此操作。PHP 中是否有任何库,我可以通过它从文件中读取类元信息而不包含。

编辑:我需要创建一个列出所有原型类的PHP文件。原因是我已经为我的库创建了一个 PHAR 文件。每当我需要使用 PHAR 文件中的任何代码时,我只需使用以下语法即可包含它。

require_once("phar://mylibrary.phar/math.php");

问题是代码提示和智能感知不起作用。我正在使用zend studio。所以我想,如果我创建一个包含所有原型类的文件,然后包含在新项目中,那么代码提示将起作用。

如果你的编码风格保证你永远不会在多行上破坏函数声明的参数,你可以通过选择与以下模式匹配的行(并根据需要更正大括号(来非常轻松地破解原型生成器:

/^class /
/^}/
/^'s*('w+)?'s*function'b/   # Must append a closing } to each line matching this

你可以操纵一个PHP脚本来完成所有这些工作,但是如果你的环境中有Unix工具,那么上面的内容离一个完整的sed脚本只有几个字符。

在这里,它根据要求(未测试(嵌入在 PHP 脚本中:

$fp = fopen("source.php");
while (($line = fgets($fp)) !== false) {
    if (preg_match("/^class |^}/", $line))
        print $line;
    elif (preg_match('/^'s*('w+)?'s*function'b/', $line))
        print rtrim($line) . " }'n";
}

根据您的编码风格进行调整/扩展。