Пример #1
0
 protected function _parse(&$variable)
 {
     if (!is_object($variable)) {
         return false;
     }
     $className = get_class($variable);
     // Assuming class definition will not change inside one request
     if (!isset(self::$cache[$className])) {
         $reflection = new \ReflectionClass($variable);
         $public = $private = $protected = array();
         // Class methods
         foreach ($reflection->getMethods() as $method) {
             $params = array();
             // Access type
             $access = implode(' ', \Reflection::getModifierNames($method->getModifiers()));
             // Method parameters
             foreach ($method->getParameters() as $param) {
                 $paramString = '';
                 if ($param->isArray()) {
                     $paramString .= 'array ';
                 } else {
                     try {
                         if ($paramClassName = $param->getClass()) {
                             $paramString .= $paramClassName->name . ' ';
                         }
                     } catch (ReflectionException $e) {
                         preg_match('/\\[\\s\\<\\w+?>\\s([\\w]+)/s', $param->__toString(), $matches);
                         $paramClassName = isset($matches[1]) ? $matches[1] : '';
                         $paramString .= ' UNDEFINED CLASS (' . $paramClassName . ') ';
                     }
                 }
                 $paramString .= ($param->isPassedByReference() ? '&' : '') . '$' . $param->getName();
                 if ($param->isDefaultValueAvailable()) {
                     if (is_array($param->getDefaultValue())) {
                         $arrayValues = array();
                         foreach ($param->getDefaultValue() as $key => $value) {
                             $arrayValues[] = $key . ' => ' . $value;
                         }
                         $defaultValue = 'array(' . implode(', ', $arrayValues) . ')';
                     } elseif ($param->getDefaultValue() === null) {
                         $defaultValue = 'NULL';
                     } elseif ($param->getDefaultValue() === false) {
                         $defaultValue = 'false';
                     } elseif ($param->getDefaultValue() === true) {
                         $defaultValue = 'true';
                     } elseif ($param->getDefaultValue() === '') {
                         $defaultValue = '""';
                     } else {
                         $defaultValue = $param->getDefaultValue();
                     }
                     $paramString .= ' = ' . $defaultValue;
                 }
                 $params[] = $paramString;
             }
             $output = new kintVariableData();
             // Simple DocBlock parser, look for @return
             if ($docBlock = $method->getDocComment()) {
                 $matches = array();
                 if (preg_match_all('/@(\\w+)\\s+(.*)\\r?\\n/m', $docBlock, $matches)) {
                     $lines = array_combine($matches[1], $matches[2]);
                     if (isset($lines['return'])) {
                         $output->operator = '->';
                         # since we're outputting code, assumption that the string is utf8 is most likely correct
                         # and saves resources
                         $output->type = self::_escape($lines['return'], 'UTF-8');
                     }
                 }
             }
             $output->name = ($method->returnsReference() ? '&' : '') . $method->getName() . '(' . implode(', ', $params) . ')';
             $output->access = $access;
             if (is_string($docBlock)) {
                 $lines = array();
                 foreach (explode("\n", $docBlock) as $line) {
                     $line = trim($line);
                     if (in_array($line, array('/**', '/*', '*/'))) {
                         continue;
                     } elseif (strpos($line, '*') === 0) {
                         $line = substr($line, 1);
                     }
                     $lines[] = self::_escape(trim($line), 'UTF-8');
                 }
                 $output->extendedValue = implode("\n", $lines) . "\n\n";
             }
             $declaringClass = $method->getDeclaringClass();
             $declaringClassName = $declaringClass->getName();
             if ($declaringClassName !== $className) {
                 $output->extendedValue .= "<small>Inherited from <i>{$declaringClassName}</i></small>\n";
             }
             $fileName = \Arx\classes\debug\Kint::shortenPath($method->getFileName(), $method->getStartLine());
             if ($fileName) {
                 $output->extendedValue .= "<small>Defined in {$fileName}</small>";
             }
             $sortName = $access . $method->getName();
             if ($method->isPrivate()) {
                 $private[$sortName] = $output;
             } elseif ($method->isProtected()) {
                 $protected[$sortName] = $output;
             } else {
                 $public[$sortName] = $output;
             }
         }
         if (!$private && !$protected && !$public) {
             self::$cache[$className] = false;
         }
         ksort($public);
         ksort($protected);
         ksort($private);
         self::$cache[$className] = $public + $protected + $private;
     }
     $this->value = self::$cache[$className];
     $this->type = 'Available methods';
     $this->size = count(self::$cache[$className]);
 }
Пример #2
0
 /**
  * Define Debug deep level
  *
  * @param $i
  */
 public static function level($level)
 {
     Kint::$maxLevels = $level;
 }