Убедитесь, что все экземпляры определенного метода возвращают значение.Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Убедитесь, что все экземпляры определенного метода возвращают значение.

Сообщение Anonymous »

У нас есть многопользовательское PHP-приложение. Это приложение предоставляет набор основных функций, а затем на основе каждого клиента мы можем создавать веб-приложения, используя и расширяя ядро.
Время от времени мы вносим изменения, которые требуют от нас пересмотреть некоторые настройки и привести их в соответствие с ядром. Недавнее изменение заключалось в том, что определенный метод должен возвращать массив. Это легко указать в ядре, например:

Код: Выделить всё

class MyLibrary {
public function myMethod(): array {
...
}
}
Однако тогда нам нужно будет убедиться, что все классы, расширяющие библиотеку, также имеют соответствующую сигнатуру метода. Мы так и сделаем, но нам также необходимо убедиться, что все эти методы действительно возвращают массив. В настоящее время необходимо проверить около 250 клиентов, и может существовать несколько файлов, расширяющих библиотеку, как показано в приведенном выше примере.
Это заставило меня задуматься о поиске методов, которые этого не делают. t вернуть массив программно, и я наткнулся на этот драгоценный камень.
https://github.com/nikic/php-ast
Похоже, что я могу использовать его для чтения исходного кода класса, а затем посмотреть синтаксическое дерево, чтобы узнать, возвращает ли myMethod() значение. Особенно я ищу методы, которые просто ничего не возвращают.
Я попробовал это в качестве отправной точки:

Код: Выделить всё

use PhpParser\ParserFactory;
use PhpParser\{Node, NodeTraverser, NodeVisitorAbstract};

$code = file_get_contents('path/to/file.php');
$parser = (new ParserFactory())->createForNewestSupportedVersion();
$ast = $parser->parse($code);

$traverser = new NodeTraverser;
$traverser->addVisitor(new class extends NodeVisitorAbstract {
public function leaveNode(Node $node) {
dump($node);
readline();
echo "\n\n\n\n";
}
});
И это позволяет мне перемещаться по AST и видеть узлы, я могу видеть объекты PhpParser\Node\Stmt\ClassMethod и видеть операторы () внутри него, но я не совсем понимаю, как проверить, есть ли в операторах PhpParser\Node\Stmt\Return или нет.
Документация по библиотеке php-ast недостаточно подробная, чтобы помочь мне понять, как это сделать. Любые рекомендации приветствуются.


Подробнее здесь: https://stackoverflow.com/questions/793 ... rn-a-value
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»