Advertisement
fagci

Get events with class name and path

May 23rd, 2017
340
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 1.44 KB | None | 0 0
  1. $allFiles = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator(\Yii::app()->getBasePath()));
  2.  
  3.         $phpFiles = new \RegexIterator($allFiles, '/\.php$/');
  4.         $res = [];
  5.         /** @var SplFileInfo $phpFile */
  6.         foreach ($phpFiles as $phpFile) {
  7.             $content = file_get_contents($phpFile->getRealPath());
  8.             $tokens = token_get_all($content);
  9.             $className = '';
  10.             for ($index = 0; isset($tokens[$index]); $index++) {
  11.                 if (!isset($tokens[$index][0])) {
  12.                     continue;
  13.                 }
  14.                 if (T_CLASS === $tokens[$index][0]) {
  15.                     $index += 2; // Skip class keyword and whitespace
  16.                     $className = $tokens[$index][1];
  17.                 }
  18.                 if (T_FUNCTION === $tokens[$index][0]) {
  19.                     $index += 2; // Skip class keyword and whitespace
  20.                     $mName = $tokens[$index][1];
  21.                     if (substr($mName, 0, 2) !== 'on') {
  22.                         continue;
  23.                     }
  24.                     if(!array_key_exists($className,$res)){
  25.                         $res[$className] = [
  26.                             'path'   => $phpFile->getPathname(),
  27.                             'events' => [],
  28.                         ];
  29.                     }
  30.                     $res[$className]['events'][] = $mName;
  31.                 }
  32.  
  33.             }
  34.         }
  35.  
  36.         dd($res);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement