0

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工作室。所以我想,如果我创建一个包含所有原型类的文件,然后将其包含到新项目中,那么代码提示将起作用。

4

1 回答 1

0

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

/^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";
}

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

于 2013-10-07T12:06:04.100 回答