public static function analyze($path_to_folder, $map_calsses = true) { //Log::writeInfo( "ClassManager start analyze classes", "file" ); if ($path_to_folder == false) { throw new CodeRunnerException("Wrong path to code source"); } $all_files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path_to_folder)); $php_files = new RegexIterator($all_files, '/\\.php$/'); $classes = []; $namespaces_path = []; foreach ($php_files as $php_file) { $class_info = []; $class_info['class_name'] = basename($php_file->getRealPath(), ".php"); $class_info['namespace'] = self::getNamespace(file_get_contents($php_file->getRealPath())); if ($class_info['namespace'] != '') { $class_info['full_name'] = $class_info['namespace'] . '\\' . $class_info['class_name']; } else { $class_info['full_name'] = $class_info['class_name']; } $class_info['path'] = $php_file->getRealPath(); self::putToHolder($class_info, 'class_name'); $namespaces_path[$class_info['namespace']] = pathinfo($class_info['path'])['dirname']; //key = namespace key = path to folder; $classes[] = ['name' => $class_info['class_name'], 'namespace' => $class_info['namespace'] . "\\" . $class_info['class_name']]; } foreach ($namespaces_path as $namespace => $path) { Autoload::addNamespace($namespace, $path); // add autoloading for user classes } if ($map_calsses == true) { Backendless::ignoreMapException(); foreach ($classes as $class) { Backendless::mapTableToClass($class['name'], $class['namespace']); // set mapping for SDK. } } }