3v4l.org

run code in 300+ PHP versions simultaneously
<?php /** * Implements a read/write buffer. */ class Buffer { protected $eof = false; protected $indexRead = 0; protected $indexWrite = 0; protected $buffer = []; public function write($bytes) { if ($bytes === null) { $this->eof = true; } else { $this->buffer[$this->indexWrite++] = $bytes; } } public function read($length = 4096) { if (!$this->buffer) { return $this->eof ? null : ''; } $output = ''; $outputLength = 0; while ($this->indexRead < $this->indexWrite) { $chunk = $this->buffer[$this->indexRead]; $chunkLength = \strlen($chunk); if ($outputLength + $chunkLength == $length) { unset($this->buffer[$this->indexRead++]); $output .= $chunk; return $output; } if ($outputLength + $chunkLength > $length) { $slice = $length - $outputLength; $this->buffer[$this->indexRead] = \substr($chunk, $slice); $output .= \substr($chunk, 0, $slice); return $output; } unset($this->buffer[$this->indexRead++]); $output .= $chunk; $outputLength += $chunkLength; } return $output; } } $b = new Buffer(); $b->write('ABCDEFGHIJ'); $b->write('KLMNOPQRSTUVWXYZ'); var_dump($b->read(3)); var_dump($b->read(3)); var_dump($b->read(3)); var_dump($b->read(3)); var_dump($b->read(3)); var_dump($b->read(3)); var_dump($b->read(3)); var_dump($b->read(3)); var_dump($b->read(3)); var_dump($b->read(3)); var_dump($b->read(3)); var_dump($b->read(3)); var_dump($b->read(3)); var_dump($b->read(3)); var_dump($b->read(3)); var_dump($b->read(3)); var_dump($b->read(3)); echo 'Writing more...' . PHP_EOL; $b->write('01234567890'); var_dump($b->read(3)); var_dump($b->read(3)); var_dump($b->read(3)); var_dump($b->read(3)); var_dump($b->read(3)); echo 'EOF...' . PHP_EOL; $b->write(null); var_dump($b->read(3)); var_dump($b->read(3)); var_dump($b->read(3));
Output for 7.0.0 - 7.0.20, 7.1.0 - 7.1.20, 7.2.6 - 7.2.33, 7.3.16 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.28, 8.2.0 - 8.2.18, 8.3.0 - 8.3.4, 8.3.6
string(3) "ABC" string(3) "DEF" string(3) "GHI" string(3) "JKL" string(3) "MNO" string(3) "PQR" string(3) "STU" string(3) "VWX" string(2) "YZ" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" Writing more... string(3) "012" string(3) "345" string(3) "678" string(2) "90" string(0) "" EOF... NULL NULL NULL
Output for 8.3.5
Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 string(3) "ABC" string(3) "DEF" string(3) "GHI" string(3) "JKL" string(3) "MNO" string(3) "PQR" string(3) "STU" string(3) "VWX" string(2) "YZ" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" Writing more... string(3) "012" string(3) "345" string(3) "678" string(2) "90" string(0) "" EOF... NULL NULL NULL

preferences:
158.73 ms | 402 KiB | 172 Q