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";
}
根据您的编码风格进行调整/扩展。