Supported Versions: PHP 4, PHP 5, PHP 7, PHP 8
Return part of a string
<?php substr(string $string, int $offset, ?int $length = null): string
<?php                 } elseif (\is_array($callable)) {

                    $r = $callable;

                } elseif (false !== $i = strpos($callable, '::')) {

                    $r = [substr($callable, 0, $i), substr($callable, 2 + $i)];

                } else {

                    $r = new \ReflectionFunction($callable);

                }
<?php                     $r = new \ReflectionFunction($callable);

                }

            } elseif (0 < $i = strpos($identifier, '::') ?: strpos($identifier, '->')) {

                $r = [substr($identifier, 0, $i), substr($identifier, 2 + $i)];

            } else {

                $r = new \ReflectionClass($identifier);

            }
<?php             $format .= ($i->y ? '%yy ' : '').($i->m ? '%mm ' : '').($i->d ? '%dd ' : '');

        }



        $format .= $i->h || $i->i || $i->s || $i->f ? '%H:%I:'.self::formatSeconds($i->s, substr($i->f, 2)) : '';

        $format = '%R ' === $format ? '0s' : $format;



        return $i->format(rtrim($format));
<?php                 $a[$prefix.'src'] = self::$framesCache[$cacheKey];

            } else {

                if (preg_match('/\((\d+)\)(?:\([\da-f]{32}\))? : (?:eval\(\)\'d code|runtime-created function)$/', $f['file'], $match)) {

                    $f['file'] = substr($f['file'], 0, -\strlen($match[0]));

                    $f['line'] = (int) $match[1];

                }

                $src = $f['line'];
<?php         foreach ($src as $i => $c) {

            if ($ltrim) {

                $c = isset($c[$ltrim]) && "\r" !== $c[$ltrim] ? substr($c, $ltrim) : ltrim($c, " \t");

            }

            $c = substr($c, 0, -1);

            if ($i !== $srcContext) {
<?php             if ($ltrim) {

                $c = isset($c[$ltrim]) && "\r" !== $c[$ltrim] ? substr($c, $ltrim) : ltrim($c, " \t");

            }

            $c = substr($c, 0, -1);

            if ($i !== $srcContext) {

                $c = new ConstStub('default', $c);

            } else {
<?php         }

        if (str_starts_with($href, 'file://')) {

            if ($href === $label) {

                $label = substr($label, 7);

            }

            $href = substr($href, 7);

        } elseif (str_contains($href, '://')) {
<?php             if ($href === $label) {

                $label = substr($label, 7);

            }

            $href = substr($href, 7);

        } elseif (str_contains($href, '://')) {

            $this->attr['href'] = $href;
<?php         if ($composerRoot = $this->getComposerRoot($href, $this->inVendor)) {

            $this->attr['ellipsis'] = \strlen($href) - \strlen($composerRoot) + 1;

            $this->attr['ellipsis-type'] = 'path';

            $this->attr['ellipsis-tail'] = 1 + ($this->inVendor ? 2 + \strlen(implode('', \array_slice(explode(\DIRECTORY_SEPARATOR, substr($href, 1 - $this->attr['ellipsis'])), 0, 2))) : 0);

        } elseif (3 < \count($ellipsis = explode(\DIRECTORY_SEPARATOR, $href))) {

            $this->attr['ellipsis'] = 2 + \strlen(implode('', \array_slice($ellipsis, -2)));

            $this->attr['ellipsis-type'] = 'path';
<?php                         if (!$param->isOptional() && $param->allowsNull() && 'mixed' !== $type->getName()) {

                            $signature .= '?';

                        }

                        $signature .= substr(strrchr('\\'.$type->getName(), '\\'), 1).' ';

                    }

                }

                $signature .= $k;
<?php                 $signature .= ' = ';



                if ($param->isDefaultValueConstant()) {

                    $signature .= substr(strrchr('\\'.$param->getDefaultValueConstantName(), '\\'), 1);

                } elseif (null === $v) {

                    $signature .= 'null';

                } elseif (\is_array($v)) {
<?php                 } elseif (\is_bool($v)) {

                    $signature .= $v ? 'true' : 'false';

                } elseif (\is_object($v)) {

                    $signature .= 'new '.substr(strrchr('\\'.get_debug_type($v), '\\'), 1);

                } else {

                    $signature .= $v;

                }
<?php                 }

            }

        }

        $signature = (empty($a[$prefix.'returnsReference']) ? '' : '&').'('.substr($signature, 2).')';



        if (isset($a[$prefix.'returnType'])) {

            $signature .= ': '.substr(strrchr('\\'.$a[$prefix.'returnType'], '\\'), 1);
<?php         $signature = (empty($a[$prefix.'returnsReference']) ? '' : '&').'('.substr($signature, 2).')';



        if (isset($a[$prefix.'returnType'])) {

            $signature .= ': '.substr(strrchr('\\'.$a[$prefix.'returnType'], '\\'), 1);

        }



        return $signature;
<?php                             $stub->class = Stub::STRING_BINARY;

                            if (0 <= $maxString && 0 < $cut = \strlen($v) - $maxString) {

                                $stub->cut = $cut;

                                $stub->value = substr($v, 0, -$cut);

                            } else {

                                $stub->value = $v;

                            }