private function doAdd(string $a, string $b) : string
    {
        $length = $this->pad($a, $b);

        $carry = 0;
        $result = '';

        for ($i = $length - $this->maxDigits;; $i -= $this->maxDigits) {
            $blockLength = $this->maxDigits;

            if ($i < 0) {
                $blockLength += $i;
                $i = 0;
            }

            $blockA = \substr($a, $i, $blockLength);
            $blockB = \substr($b, $i, $blockLength);

            $sum = (string) ($blockA + $blockB + $carry);
            $sumLength = \strlen($sum);

            if ($sumLength > $blockLength) {
                $sum = \substr($sum, 1);
                $carry = 1;
            } else {
                if ($sumLength < $blockLength) {
                    $sum = \str_repeat('0', $blockLength - $sumLength) . $sum;
                }
                $carry = 0;
            }

            $result = $sum . $result;

            if ($i === 0) {
                break;
            }
        }

        if ($carry === 1) {
            $result = '1' . $result;
        }

        return $result;
    }
private function doAdd(string $a, string $b) : string
    {
        $length = $this->pad($a, $b);

        $carry = 0;
        $result = '';

        for ($i = $length - $this->maxDigits;; $i -= $this->maxDigits) {
            $blockLength = $this->maxDigits;

            if ($i < 0) {
                $blockLength += $i;
                $i = 0;
            }

            $blockA = \substr($a, $i, $blockLength);
            $blockB = \substr($b, $i, $blockLength);

            $sum = (string) ($blockA + $blockB + $carry);
            $sumLength = \strlen($sum);

            if ($sumLength > $blockLength) {
                $sum = \substr($sum, 1);
                $carry = 1;
            } else {
                if ($sumLength < $blockLength) {
                    $sum = \str_repeat('0', $blockLength - $sumLength) . $sum;
                }
                $carry = 0;
            }

            $result = $sum . $result;

            if ($i === 0) {
                break;
            }
        }

        if ($carry === 1) {
            $result = '1' . $result;
        }

        return $result;
    }
private function doAdd ( string $ a , string $ b ) : string { $ length = $ this -> pad ( $ a , $ b ) ; $ carry = 0 ; $ result = '' ; for ( $ i = $ length - $ this -> maxDigits ; ; $ i -= $ this -> maxDigits ) { $ blockLength = $ this -> maxDigits ; if ( $ i < 0 ) { $ blockLength += $ i ; $ i = 0 ; } $ blockA = \ substr ( $ a , $ i , $ blockLength ) ; $ blockB = \ substr ( $ b , $ i , $ blockLength ) ; $ sum = ( string ) ( $ blockA + $ blockB + $ carry ) ; $ sumLength = \ strlen ( $ sum ) ; if ( $ sumLength > $ blockLength ) { $ sum = \ substr ( $ sum , 1 ) ; $ carry = 1 ; } else { if ( $ sumLength < $ blockLength ) { $ sum = \ str_repeat ( '0' , $ blockLength - $ sumLength ) . $ sum ; } $ carry = 0 ; } $ result = $ sum . $ result ; if ( $ i === 0 ) { break ; } } if ( $ carry === 1 ) { $ result = '1' . $ result ; } return $ result ; }
Performs the addition of two non-signed large integers.

@param string $a The first operand.
@param string $b The second operand.

@return string
Performs the addition of two non - signed large integers .