for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
namespace Chrisyue\PhpM3u8\Stream;
abstract class AbstractStream implements StreamInterface
{
public function read()
static $line;
static $lineInfo;
if ($this->getLine() !== $line) {
$line = $this->getLine();
$lineInfo = $this->getLineInfo($line);
}
return $lineInfo;
public function write(array $lineInfo)
if (empty($lineInfo['tag'])) {
$this->putLine($lineInfo['value']);
return;
if (empty($lineInfo['value'])) {
$this->putLine($lineInfo['tag']);
$this->putLine(sprintf('%s:%s', $lineInfo['tag'], $lineInfo['value']));
abstract protected function getLine();
abstract protected function putLine($line);
private function getLineInfo($line)
$line = trim($line);
if (empty($line)) {
if ('#' !== $line[0]) {
return ['value' => $line];
if (strlen($line) < 2) {
list($tag, $value) = array_pad(explode(':', $line, 2), 2, '');
return compact('tag', 'value');