/** * Add class and file name to the list. * @param string * @param string * @param int * @return void */ private function addClass($class, $file, $time) { $lClass = strtolower($class); if (isset($this->list[$lClass][0]) && ($file2 = $this->list[$lClass][0]) !== $file && is_file($file2)) { if ($this->files[$file2] !== filemtime($file2)) { $this->scanScript($file2); return $this->addClass($class, $file, $time); } $e = new InvalidStateException("Ambiguous class '$class' resolution; defined in $file and in " . $this->list[$lClass][0] . "."); if (PHP_VERSION_ID < 50300) { NDebugger::_exceptionHandler($e); exit; } else { throw $e; } } $this->list[$lClass] = array($file, $time, $class); $this->files[$file] = $time; }
/** * @return void */ private function updateFile($file) { foreach ($this->classes as $class => $info) { if (isset($info['file']) && $info['file'] === $file) { unset($this->classes[$class]); } } if (is_file($file)) { foreach ($this->scanPhp(file_get_contents($file)) as $class) { $info = & $this->classes[strtolower($class)]; if (isset($info['file']) && @filemtime($info['file']) !== $info['time']) { // intentionally ==, file may not exists $this->updateFile($info['file']); $info = & $this->classes[strtolower($class)]; } if (isset($info['file'])) { $e = new InvalidStateException("Ambiguous class $class resolution; defined in {$info['file']} and in $file."); if (PHP_VERSION_ID < 50300) { NDebugger::_exceptionHandler($e); exit; } else { throw $e; } } $info = array('file' => $file, 'time' => filemtime($file), 'orig' => $class); } } }