Пример #1
0
my_echo("PHP-P array serialized", strlen($serialized), "bytes");
$f = function () use($serialized) {
    $stmts = unserialize($serialized);
};
my_echo("PHP-P array unserialize time", $b->timeIt($f), "sec");
$xref = new XRef();
// init autoload etc
$parser = new XRef_Parser_PHP();
$f = function () use($parser, $code, $filename) {
    $pf = $parser->parse($code, $filename);
    $pf->release();
};
my_echo("XRef internal parser", $b->timeIt($f, 30), "sec");
$slices = array();
$pf = $parser->parse($code, $filename);
$project_database = new XRef_ProjectDatabase();
foreach ($xref->getPlugins("XRef_IProjectLintPlugin") as $id => $plugin) {
    $slices[$id] = $plugin->createFileSlice($pf);
}
$slices['_db'] = $project_database->createFileSlice($pf);
$pf->release();
$serialized = serialize($slices);
my_echo("XRef serialized size", strlen($serialized), "bytes");
$compressed = gzcompress($serialized);
my_echo("XRef compressed size", strlen($compressed), "bytes");
$f = function () use($serialized) {
    $slices = unserialize($serialized);
};
my_echo("XRef unserialize time", $b->timeIt($f), "sec");
function my_echo($prefix, $data, $suffix = null)
{
Пример #2
0
 /**
  * @param ReflectionClass $rc
  * @return XRef_Class
  */
 private function getClassByReflection(ReflectionClass $rc)
 {
     $class_name = $rc->getName();
     if (!isset(self::$hasTraits)) {
         $rrc = new ReflectionClass("ReflectionClass");
         self::$hasTraits = $rrc->hasMethod("isTrait");
     }
     $c = new XRef_Class();
     $c->index = -1;
     $c->nameIndex = -1;
     $c->bodyStarts = -1;
     $c->bodyEnds = -1;
     if ($rc->isInterface()) {
         $c->kind = T_INTERFACE;
     } elseif (self::$hasTraits && $rc->isTrait()) {
         $c->kind = T_TRAIT;
     } else {
         $c->kind = T_CLASS;
     }
     $c->name = $class_name;
     $parent_class = $rc->getParentClass();
     $c->extends = $parent_class ? array($parent_class->getName()) : array();
     $c->implements = $rc->getInterfaceNames();
     $c->uses = self::$hasTraits ? $rc->getTraitNames() : array();
     foreach ($rc->getMethods() as $rm) {
         $method_name = $rm->getName();
         if (isset(self::$overrideInternalClasses[$class_name]) && isset(self::$overrideInternalClasses[$class_name][$method_name])) {
             $m = $this->getFunctionFromString(self::$overrideInternalClasses[$class_name][$method_name]);
         } else {
             $m = $this->getMethodByReflection($rm);
         }
         $m->className = $class_name;
         $c->methods[] = $m;
     }
     foreach ($rc->getConstants() as $name => $value) {
         $const = $this->getConstantByReflection($name);
         $const->className = $class_name;
         $c->constants[] = $const;
     }
     foreach ($rc->getProperties() as $rp) {
         $p = $this->getPropertyByReflection($rp);
         $p->className = $class_name;
         $c->properties[] = $p;
     }
     return $c;
 }