Mastodont Posted July 14, 2007 Share Posted July 14, 2007 I wrote function for extracting class members from class into interface - without reflection. Any comments are welcomed. It takes into account only first class in source file. Constants are omitted. function makeInterfaceFromClassCode($file) { // open a file $contents = file_get_contents($file); if (!$contents) return false; // is there a definition of class in file? if (preg_match('/^[^\w]*class/mU',$contents)) { // trim opening part $contents = strstr($contents, 'class'); $contents = ltrim(strstr($contents, ' ')); // pick up a name of class $success = preg_match('/^(\w+)[^\w]/U',$contents, $name); if ($success) $className = $name[1]; // trim other opening part $length = strlen($className); $contents = substr($contents, $length); // now we have to find end of class $length = strlen($contents); $counter = 1; for ($i=1; $i<=$length; $i++ ) { if ($contents{$i} == '{') $counter++; if ($contents{$i} == '}') $counter--; if (!isset($helper) && $counter > 1 ) $helper = true; if ($helper && $counter == 1) break; } $contents = substr($contents, 1, $i); // now $contents contains only class definition // pick up properties and methods $success = preg_match_all('/(private|public|var)\s+(\$[a-zA-Z0-9_]+)[^;]*;/U',$contents, $vars); $success = preg_match_all('/function\s*(\w+)\s*\((.*)\)/U',$contents, $methods); // build output string $output = "interface i$className {\n\t"; foreach ($vars[0] as $value) { $output .= "$value\n\t"; } $output .= "\n\t"; foreach ($methods[0] as $value) { $output .= "$value;\n\t"; } $output = rtrim($output); return $output."\n}"; } else { return false; } } // end of function makeInterfaceFromClassCode Link to comment https://forums.phpfreaks.com/topic/59952-make-interface-from-class/ Share on other sites More sharing options...
Recommended Posts