Предположим, у меня есть папка с именем parent
Там есть много подпапок, таких как child1
, child2
и т. Д. В некоторых из этих «дочерних» папок есть файл в имени module.php
. Как я могу рекурсивно проверять все подпапки parent
папки и включать все файлы с именем module.php
в мое приложение?
Я попробовал ниже и не могу понять, что не так:
if ( !function_exists( 'glob_recursive' ) ) { function glob_recursive( $pattern, $flags = 0 ) { $files = glob( $pattern, $flags ); foreach ( glob( dirname( $pattern ) . '/*', GLOB_ONLYDIR|GLOB_NOSORT ) as $dir ) { $files = array_merge( $files, glob_recursive( $dir . '/' . basename( $pattern ), $flags ) ); } return $files; } } foreach ( glob_recursive( locate_template('/lib/modules/*/module.php' ) as $module ) { require_once $module; }
Хотя это звучит как плохой дизайн для включения всех файлов, это возможно:
$directory = new RecursiveDirectoryIterator('path/to/project/'); $recIterator = new RecursiveIteratorIterator($directory); $regex = new RegexIterator($recIterator, '/\/module.php$/i'); foreach($regex as $item) { include $item->getPathname(); }
Btw, этот пример получен из комментария в руководстве PHP . Чтобы он работал, убедитесь, что все подпапки читаются PHP в этой папке. Если вы не можете сделать это уверенным, вам придется написать для него настраиваемую рекурсивную функцию (но это маловероятно).
Опять же, то, что вы делаете, не является хорошим дизайном и приведет к проблемам (раньше, чем вы могли бы подумать). Если вы придерживаетесь стиля ООП, лучше использовать механизм autload
PHP.