Я начал с попытки включить каждый файл в проект GitHub. Моя цель - вызвать get_declared_classes () после этого как форму отражения, чтобы я мог узнать, какие классы объявлены в проекте. Никогда не ожидал, что столкнусь с этой проблемой, решение которой у меня не останется после долгих исследований и испытаний. Пожалуйста, помогите.
Проект, который я использую: https://github.com/farafiri/PHP-parsing-tool
Я загрузил его в папку. Написал этот код:
$toparse = shell_exec("find '/Users/user/Documents/PHP-parsing-tool-master/src' -iname '*.php' 2> /dev/null");
$filenames = explode("\n", $toparse);
//d() is a custom function that acts like var_dump.
d($filenames);
$ filenames dumps (прошу прощения за пользовательский формат, поставляемый с d (). В основном $ filenames - это массив из 77 элементов, каждый из которых представляет собой строку, представляющую пути каждого файла в Проект Github):
array (77) [
0 => string (77) "/Users/user/Documents/PHP-parsing-tool-master/src/Extension/RuleCondition.php"
1 => string (76) "/Users/user/Documents/PHP-parsing-tool-master/src/Extension/SequenceItem.php"
2 => string (71) "/Users/user/Documents/PHP-parsing-tool-master/src/Extension/Integer.php"
3 => string (70) "/Users/user/Documents/PHP-parsing-tool-master/src/Extension/Series.php"
4 => string (68) "/Users/user/Documents/PHP-parsing-tool-master/src/Extension/Time.php"
5 => string (69) "/Users/user/Documents/PHP-parsing-tool-master/src/Extension/Regex.php"
6 => string (105) "/Users/user/Documents/PHP-parsing-tool-master/src/Extension/ItemRestrictions/ItemRestrictionInterface.php"
7 => string (98) "/Users/user/Documents/PHP-parsing-tool-master/src/Extension/ItemRestrictions/ItemRestrictionOr.php"
8 => string (99) "/Users/user/Documents/PHP-parsing-tool-master/src/Extension/ItemRestrictions/ItemRestrictionAnd.php"
9 => string (91) "/Users/user/Documents/PHP-parsing-tool-master/src/Extension/ItemRestrictions/FollowedBy.php"
10 => string (83) "/Users/user/Documents/PHP-parsing-tool-master/src/Extension/ItemRestrictions/Is.php"
11 => string (88) "/Users/user/Documents/PHP-parsing-tool-master/src/Extension/ItemRestrictions/Contain.php"
12 => string (99) "/Users/user/Documents/PHP-parsing-tool-master/src/Extension/ItemRestrictions/ItemRestrictionNot.php"
13 => string (72) "/Users/user/Documents/PHP-parsing-tool-master/src/Extension/TextNode.php"
14 => string (86) "/Users/user/Documents/PHP-parsing-tool-master/src/Extension/WhiteCharactersContext.php"
15 => string (82) "/Users/user/Documents/PHP-parsing-tool-master/src/Extension/ExtensionInterface.php"
16 => string (70) "/Users/user/Documents/PHP-parsing-tool-master/src/Extension/Choice.php"
17 => string (80) "/Users/user/Documents/PHP-parsing-tool-master/src/Extension/ItemRestrictions.php"
18 => string (68) "/Users/user/Documents/PHP-parsing-tool-master/src/Extension/Base.php"
19 => string (73) "/Users/user/Documents/PHP-parsing-tool-master/src/Extension/Lookahead.php"
20 => string (80) "/Users/user/Documents/PHP-parsing-tool-master/src/Extension/ParametrizedNode.php"
21 => string (71) "/Users/user/Documents/PHP-parsing-tool-master/src/Extension/Unorder.php"
22 => string (68) "/Users/user/Documents/PHP-parsing-tool-master/src/Extension/Text.php"
23 => string (76) "/Users/user/Documents/PHP-parsing-tool-master/src/Extension/StringObject.php"
24 => string (70) "/Users/user/Documents/PHP-parsing-tool-master/src/ParsingException.php"
25 => string (60) "/Users/user/Documents/PHP-parsing-tool-master/src/Parser.php"
26 => string (64) "/Users/user/Documents/PHP-parsing-tool-master/src/Util/Regex.php"
27 => string (64) "/Users/user/Documents/PHP-parsing-tool-master/src/Util/Error.php"
28 => string (75) "/Users/user/Documents/PHP-parsing-tool-master/src/SyntaxTreeNode/Series.php"
29 => string (85) "/Users/user/Documents/PHP-parsing-tool-master/src/SyntaxTreeNode/PredefinedString.php"
30 => string (75) "/Users/user/Documents/PHP-parsing-tool-master/src/SyntaxTreeNode/Branch.php"
31 => string (73) "/Users/user/Documents/PHP-parsing-tool-master/src/SyntaxTreeNode/Base.php"
32 => string (76) "/Users/user/Documents/PHP-parsing-tool-master/src/SyntaxTreeNode/Numeric.php"
33 => string (73) "/Users/user/Documents/PHP-parsing-tool-master/src/SyntaxTreeNode/Root.php"
34 => string (73) "/Users/user/Documents/PHP-parsing-tool-master/src/SyntaxTreeNode/Leaf.php"
35 => string (77) "/Users/user/Documents/PHP-parsing-tool-master/src/SyntaxTreeNode/LeafTime.php"
36 => string (71) "/Users/user/Documents/PHP-parsing-tool-master/src/GrammarNodeCopier.php"
37 => string (72) "/Users/user/Documents/PHP-parsing-tool-master/src/Examples/CSVParser.php"
38 => string (88) "/Users/user/Documents/PHP-parsing-tool-master/src/Examples/YamlLikeIndentationParser.php"
39 => string (89) "/Users/user/Documents/PHP-parsing-tool-master/src/Examples/ArithmeticExpressionParser.php"
40 => string (73) "/Users/user/Documents/PHP-parsing-tool-master/src/Examples/JSONParser.php"
41 => string (75) "/Users/user/Documents/PHP-parsing-tool-master/src/Examples/JSONFormater.php"
42 => string (86) "/Users/user/Documents/PHP-parsing-tool-master/src/Examples/BooleanExpressionParser.php"
43 => string (74) "/Users/user/Documents/PHP-parsing-tool-master/src/ParserAwareInterface.php"
44 => string (63) "/Users/user/Documents/PHP-parsing-tool-master/src/Exception.php"
45 => string (72) "/Users/user/Documents/PHP-parsing-tool-master/src/GrammarNode/Series.php"
46 => string (75) "/Users/user/Documents/PHP-parsing-tool-master/src/GrammarNode/PEGBranch.php"
47 => string (96) "/Users/user/Documents/PHP-parsing-tool-master/src/GrammarNode/WhitespaceNegativeContextCheck.php"
48 => string (81) "/Users/user/Documents/PHP-parsing-tool-master/src/GrammarNode/BranchInterface.php"
49 => string (74) "/Users/user/Documents/PHP-parsing-tool-master/src/GrammarNode/BaseNode.php"
50 => string (82) "/Users/user/Documents/PHP-parsing-tool-master/src/GrammarNode/PredefinedString.php"
51 => string (79) "/Users/user/Documents/PHP-parsing-tool-master/src/GrammarNode/LeafInterface.php"
52 => string (71) "/Users/user/Documents/PHP-parsing-tool-master/src/GrammarNode/Regex.php"
53 => string (86) "/Users/user/Documents/PHP-parsing-tool-master/src/GrammarNode/BranchExtraCondition.php"
54 => string (79) "/Users/user/Documents/PHP-parsing-tool-master/src/GrammarNode/BranchFactory.php"
55 => string (79) "/Users/user/Documents/PHP-parsing-tool-master/src/GrammarNode/ParameterNode.php"
56 => string (73) "/Users/user/Documents/PHP-parsing-tool-master/src/GrammarNode/AnyText.php"
57 => string (72) "/Users/user/Documents/PHP-parsing-tool-master/src/GrammarNode/Branch.php"
58 => string (72) "/Users/user/Documents/PHP-parsing-tool-master/src/GrammarNode/Choice.php"
59 => string (82) "/Users/user/Documents/PHP-parsing-tool-master/src/GrammarNode/ItemRestrictions.php"
60 => string (75) "/Users/user/Documents/PHP-parsing-tool-master/src/GrammarNode/Decorator.php"
61 => string (73) "/Users/user/Documents/PHP-parsing-tool-master/src/GrammarNode/Numeric.php"
62 => string (75) "/Users/user/Documents/PHP-parsing-tool-master/src/GrammarNode/Lookahead.php"
63 => string (82) "/Users/user/Documents/PHP-parsing-tool-master/src/GrammarNode/ParametrizedNode.php"
64 => string (87) "/Users/user/Documents/PHP-parsing-tool-master/src/GrammarNode/BranchStringCondition.php"
65 => string (79) "/Users/user/Documents/PHP-parsing-tool-master/src/GrammarNode/NodeInterface.php"
66 => string (88) "/Users/user/Documents/PHP-parsing-tool-master/src/GrammarNode/WhitespaceContextCheck.php"
67 => string (88) "/Users/user/Documents/PHP-parsing-tool-master/src/GrammarNode/PredefinedSimpleString.php"
68 => string (77) "/Users/user/Documents/PHP-parsing-tool-master/src/GrammarNode/NaiveBranch.php"
69 => string (73) "/Users/user/Documents/PHP-parsing-tool-master/src/GrammarNode/Unorder.php"
70 => string (81) "/Users/user/Documents/PHP-parsing-tool-master/src/GrammarNode/BranchDecorator.php"
71 => string (74) "/Users/user/Documents/PHP-parsing-tool-master/src/GrammarNode/LeafTime.php"
72 => string (70) "/Users/user/Documents/PHP-parsing-tool-master/src/GrammarNode/Text.php"
73 => string (71) "/Users/user/Documents/PHP-parsing-tool-master/src/GrammarNode/TextS.php"
74 => string (85) "/Users/user/Documents/PHP-parsing-tool-master/src/GrammarNode/ErrorTrackDecorator.php"
75 => string (67) "/Users/user/Documents/PHP-parsing-tool-master/src/GrammarParser.php"
76 => string (0) ""
]
Тогда:
foreach ($filenames as $n=>$f) {
d($f);
include_once $f;
d($f);
}
У foreach l oop нет проблем до элемента с индексом 15. Сценарий завершается при включении этого файла. Я знаю это, потому что функция d () до включения была выполнена, но не функция d () после включения. Я запустил скрипт в командной строке и использовал PHP7 .2.10 из MAMP 4 в macOS 10.13.6.
Это полное содержимое этого файла:
<?php
namespace ParserGenerator\Extension;
echo "hello in interface";
interface ExtensionInterface
{
function extendGrammar($grammarGrammar);
function modifyBranches($grammar, $parsedGrammar, $grammarParser, $options);
function createGrammarBranch($grammar, $grammarBranch, $grammarParser, $options);
function fillGrammarBranch($grammar, $grammarBranch, $grammarParser, $options);
function buildSequenceItem(&$grammar, $sequenceItem, $grammarParser, $options);
function buildSequence($grammar, $rule, $grammarParser, $options);
}
echo "hello in interface 2";
Сценарий прерван после того, как "привет в интерфейсе" был отражен. «Привет в интерфейсе 2» никогда не повторялось.
Странно также то, что, хотя мой файл php .ini уже был установлен в error_reporting = E_ALL и display_errors = On, никакой информации о завершении скрипта нет что бы ни было сброшено в мой терминал. Нет ошибки синтаксического анализа, фатальная ошибка и т. Д. c.
В чем проблема и как заставить скрипт выполнить весь процесс до конца? Извините, но я что-то упустил в пространствах имен и интерфейсах?