Skip to content
This repository was archived by the owner on Jan 23, 2019. It is now read-only.

Commit 586c544

Browse files
committed
up
1 parent 6f3a032 commit 586c544

File tree

3 files changed

+76
-1
lines changed

3 files changed

+76
-1
lines changed

src/Files/Directory.php

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,43 @@
1919
*/
2020
class Directory extends FileSystem
2121
{
22+
/**
23+
* ```php
24+
* $filter = function ($current, $key, $iterator) {
25+
* // \SplFileInfo $current
26+
* // Skip hidden files and directories.
27+
* if ($current->getFilename()[0] === '.') {
28+
* return false;
29+
* }
30+
* if ($current->isDir()) {
31+
* // Only recurse into intended subdirectories.
32+
* return $current->getFilename() !== '.git';
33+
* }
34+
* // Only consume files of interest.
35+
* return strpos($current->getFilename(), '.php') !== false;
36+
* };
37+
*
38+
* // $info is instance of \SplFileInfo
39+
* foreach(Directory::getRecursiveIterator($srcDir, $filter) as $info) {
40+
* // $info->getFilename(); ...
41+
* }
42+
* ```
43+
* @param string $srcDir
44+
* @param callable $filter
45+
* @return \RecursiveIteratorIterator
46+
*/
47+
public static function getRecursiveIterator($srcDir, callable $filter)
48+
{
49+
if (!$srcDir || !file_exists($srcDir)) {
50+
throw new \LogicException('Please provide a exists source directory.');
51+
}
52+
53+
$directory = new \RecursiveDirectoryIterator($srcDir);
54+
$filterIterator = new \RecursiveCallbackFilterIterator($directory, $filter);
55+
56+
return new \RecursiveIteratorIterator($filterIterator);
57+
}
58+
2259
/**
2360
* 判断文件夹是否为空
2461
* @param $dir

src/Helpers/FormatHelper.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ public static function phpCode($src)
308308
$iw = false;
309309
$ih = true; // in HEREDOC
310310
} elseif ($tn === T_END_HEREDOC) {
311-
$new .= 'S;';
311+
$new .= "S;\n";
312312
$iw = true;
313313
$ih = false; // in HEREDOC
314314
for ($j = $i + 1; $j < $c; $j++) {

tests/find-file.php

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
/**
3+
* Created by PhpStorm.
4+
* User: inhere
5+
* Date: 2017-10-27
6+
* Time: 10:51
7+
*/
8+
$srcDir = dirname(__DIR__, 2);
9+
10+
$directory = new \RecursiveDirectoryIterator($srcDir);
11+
$filter = new \RecursiveCallbackFilterIterator($directory, function ($current, $key, $iterator) {
12+
/**
13+
* @var \SplFileInfo $current
14+
*/
15+
// var_dump($current);die;
16+
17+
// Skip hidden files and directories.
18+
if ($current->getFilename()[0] === '.') {
19+
return false;
20+
}
21+
22+
if ($current->isDir()) {
23+
// Only recurse into intended subdirectories.
24+
return $current->getFilename() !== '.git';
25+
}
26+
27+
// Only consume files of interest.
28+
return strpos($current->getFilename(), '.php') !== false;
29+
});
30+
$iterator = new \RecursiveIteratorIterator($filter);
31+
$files = array();
32+
33+
foreach ($iterator as $info) {
34+
// var_dump($info);die;
35+
$files[] = $info->getPathname();
36+
}
37+
38+
var_dump($files);

0 commit comments

Comments
 (0)