Я разработал довольно трудоемкий ручной способ сделать это.
Как обсуждалось сверху, сам процесс прост:
- получите ваш список файлов для каждого файла.Теперь для каждого файла:
- создайте случайный идентификатор пространства имен
- обрезайте файл и замените первый начальный тег
- добавьте идентификатор пространства имен и начальный тег в файл
- записать во временный файл
- импортировать временный файл
- сделать любое необходимое отражение, затем очистить
У меня есть пример с некоторым зендом здесь ... вероятно, нетнаиболее эффективный, но он работает.
<code><?php
//first setup zend
set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__FILE__)."/../zend/library/");
require_once 'Zend/Loader/Autoloader.php';
$loader = Zend_Loader_Autoloader::getInstance();
$loader->registerNamespace(dirname(__FILE__)."/../zend/library/");
//include my extender class
class Zend_Reflection_File_WithNamespace extends Zend_Reflection_File {
public function getFunctionsWithNamespace($namespace = '', $reflectionClass = 'Zend_Reflection_Function')
{
$functions = array();
foreach ($this->_functions as $function) {
$newName = $namespace . "\\" . $function;
$instance = new $reflectionClass($newName);
if (!$instance instanceof Zend_Reflection_Function) {
require_once 'Zend/Reflection/Exception.php';
throw new Zend_Reflection_Exception('Invalid reflection class provided; must extend Zend_Reflection_Function');
}
$functions[] = $instance;
}
return $functions;
}
}
//find file(s)
$startDir = 'hello/';
//$tempDir = 'php://temp/resource=';
$tempDir = 'temp/';
$fileList = scandir($startDir);
function ppPrintR($data) {
echo "<pre>";
print_r($data);
echo "
";} // Теперь перебираем каждый файл, сначала записываем в temp, включая, а затем тестируем foreach ($ fileList как $ key => & $ fileItem) {if (is_file)($ startDir. $ fileItem)) {// Взять файл и преобразовать его $ findDir = $ startDir. $ fileItem; echo $ startDir. $ fileItem; $ inContents = file_get_contents ($ findDir); $ randIden = 'm'. preg_replace ('/\.|\s/', '', microtime ()); // Заменить«;$ functions = $ отражениеFile-> getFunctionsWithNamespace ($ randIden);эхо 'После«;// Теперь foreach функция, чтение параметров и рассмотрение исполнения foreach ($ functions as & $ functionItem) {echo $ functionItem-> name.""; $ functionParams = $ functionItem-> getParameters (); ppPrintR ($ functionParams);} // FIXME должен очистить здесь}}?>