$val) { if ($key === $index) { $base[] = $val; $index++; } else { $base[$key] = static::merge($val, $base[$key] ?? null); } } return $base; } elseif ($value === null && is_array($base)) { return $base; } else { return $value; } } public static function getPropertyType(\ReflectionProperty $prop): ?string { if (!class_exists(Nette\Utils\Type::class)) { throw new Nette\NotSupportedException('Expect::from() requires nette/utils 3.x'); } elseif ($type = Nette\Utils\Type::fromReflection($prop)) { return (string) $type; } elseif ($type = preg_replace('#\s.*#', '', (string) self::parseAnnotation($prop, 'var'))) { $class = Reflection::getPropertyDeclaringClass($prop); return preg_replace_callback('#[\w\\\\]+#', function ($m) use ($class) { return Reflection::expandClassName($m[0], $class); }, $type); } return null; } /** * Returns an annotation value. * @param \ReflectionProperty $ref */ public static function parseAnnotation(\Reflector $ref, string $name): ?string { if (!Reflection::areCommentsAvailable()) { throw new Nette\InvalidStateException('You have to enable phpDoc comments in opcode cache.'); } $re = '#[\s*]@' . preg_quote($name, '#') . '(?=\s|$)(?:[ \t]+([^@\s]\S*))?#'; if ($ref->getDocComment() && preg_match($re, trim($ref->getDocComment(), '/*'), $m)) { return $m[1] ?? ''; } return null; } /** * @param mixed $value */ public static function formatValue($value): string { if (is_object($value)) { return 'object ' . get_class($value); } elseif (is_string($value)) { return "'" . Nette\Utils\Strings::truncate($value, 15, '...') . "'"; } elseif (is_scalar($value)) { return var_export($value, true); } else { return strtolower(gettype($value)); } } } __halt_compiler();----SIGNATURE:----IvLrVtDqDIKlcFz78dQ5fVjaFFnOw1ABGt2gkfuq33uT90FsUyaqIFvNYFrqJg/SvT9BA69tlkuuRTmO0Wp1c+E9lDFuqUog6kWCW5zlpXlQnRz0CIFQ7z6F+jDARxBBGN6STs1thDp1j2PXN6EYIVTZbC8TQ5oRZvrnzIqF2SkDgTk1wJnJFe75LtOPdbaFuobrQV1I65a3YI0d3BcudAGQERhFwkg//sO7mAsp6C1KU/0/aJ7wSjNx3iwSnuSok5cDR7kBhqMs8G+ZTc34eulg7m9AkH0w4YQ9o5J6sJ1wzx7u03S92gzz4aRYqUqr82jJBAR+u3Gg4HIbPKcJRNAhYG59vu5hM9zrM9DWD9dhnqR122E0M3G8hKCOzd2/a0mMS2ZlWrlBOUXxLEHPeDieM7KJhXBAzb1COz4CJ3OSnH/b5rVzS4SxX+7cqFnASUJK4BYhz1Emv8jphmf8C1Nynhg2itH++VDj4vWKqupWAwLgz3R98JlRXx1WpfuEvAKLCA4FsOp7qkWgGtcdaJqdapwTIOtmj4a33GVAW4FPA9bVodGRfcO6cMMjO4ji7MSLvTpdhEew2KpTtGWhLbHaxGwIwdGKjCBaEHCEyC40K2BgjR/5ApTgPSp/fG+wDRBKNpG4rFxQAOSNQezEbqvaNwYsiTie7Oup447bSyQ=----ATTACHMENT:----NTAwMDM2MDI3MTkyOTY0MiA4NDU1MTgxODQ2Njc5OTY4IDMzMDkxNTAwOTA3NzUwNzA=