Esempio n. 1
0
 /**
  * StringifyException constructor.
  * @param string $message
  * @param string $file
  * @param int $line
  * @param int $code
  * @param \Exception $previous
  * @internal
  */
 public function __construct($message, $file, $line, $code = 0, $previous = null)
 {
     LJSON::restoreErrorHandler();
     parent::__construct($message, $code, $previous);
     $this->file = $file;
     $this->line = $line;
 }
Esempio n. 2
0
 /**
  * @param mixed $value
  * @param int $parameterCount
  * @return string
  * @throws \Kanti\StringifyException
  * @api
  * @example example/example1.php 15 1
  */
 public static function stringify($value, $parameterCount = 0)
 {
     if (is_null($value) || is_bool($value) || is_int($value) || is_float($value) || is_double($value) || is_numeric($value) || is_string($value)) {
         return json_encode($value);
     }
     if ($value instanceof \stdClass) {
         $value = (array) $value;
         if (empty($value)) {
             return '{}';
         }
     }
     if (is_object($value) && in_array("JsonSerializable", class_implements($value))) {
         /**
          * @var $value \JsonSerializable
          */
         $value = $value->jsonSerialize();
     }
     if (is_array($value)) {
         /**
          * @var $value \array
          */
         if ($value === []) {
             return '[]';
         }
         foreach ($value as $key => $item) {
             $value[$key] = static::stringify($item, $parameterCount);
         }
         if (array_keys($value) !== range(0, count($value) - 1)) {
             //isAssoc
             $result = '{';
             foreach ($value as $key => $v) {
                 $result .= '"' . $key . '":' . $v . ',';
             }
             return rtrim($result, ',') . '}';
         }
         return '[' . implode(',', $value) . ']';
     }
     if ($value instanceof Parameter) {
         /**
          * @var $value Parameter
          */
         return $value->getParameterResult();
     }
     if (is_callable($value)) {
         /**
          * @var $value \callable
          */
         $reflection = new \ReflectionFunction($value);
         $params = [];
         for ($i = 0; $i < count($reflection->getParameters()); $i++) {
             $paramName = "v" . ($i + $parameterCount);
             $params[$paramName] = new Parameter($paramName);
         }
         $parameterCount += count($params);
         static::$errorHandlerSet = true;
         $oldEH = function () {
         };
         $oldEH = set_error_handler(function ($severity, $message, $filename, $lineNumber) use(&$oldEH) {
             $message = preg_replace("/Object of class Kanti\\\\Parameter could not be converted to (.*)/", "Parameter's can not be converted (to \$1)", $message, -1, $count);
             if ($count) {
                 throw new StringifyException($message, $filename, $lineNumber, 1448007982);
             }
             try {
                 $oldEH($severity, $message, $filename, $lineNumber);
             } catch (\Exception $e) {
                 LJSON::restoreErrorHandler();
                 throw $e;
             }
         });
         $newValue = call_user_func_array($value, $params);
         LJSON::restoreErrorHandler();
         $value = static::stringify($newValue, $parameterCount);
         return "(" . implode(',', array_keys($params)) . ") => (" . $value . ")";
     }
     throw new StringifyException('Type not supported ', __FILE__, __LINE__, 1448007971);
 }