# Трейт HttpSoft\Message\StreamTrait

Трейт, реализующий методы, определенные в Psr\Http\Message\StreamInterface, используется внутри HttpSoft\Message\Stream.

Исходный код на GitHub.

# Публичные методы

Оригинальное подробное описание методов смотрите в Psr\Http\Message\StreamInterface.

# __destruct

Закрывает поток и связанные с ним ресурсы, когда экземпляр уничтожается.

public function __destruct();

# __toString

Читает все данные из потока в строку, от начала до конца.

public function __toString(): string;

Если поток не может быть прочитан, будет брошено исключение \RuntimeException.

# close

Закрывает поток и связанные с ним ресурсы.

public function close(): void;

# detach

Открепляет от потока связанные с ним ресурсы.

/**
 * @return resource|null
 */
public function detach();

После открепления поток находится в непригодном для использования состоянии.

# getSize

Возвращает размер в байтах, если он известен или null, если неизвестен.

public function getSize(): ?int;

# tell

Возвращает текущее положение указателя чтения/записи файла.

public function tell(): int;

Если невозможно определить позицию указателя, будет брошено исключение \RuntimeException.

# eof

Возвращает true, если указатель находится в конце потока.

public function eof(): bool;

# isSeekable

Возвращает true, если для потока разрешено перемещение указателя.

public function isSeekable(): bool;

# seek

Перемещает позицию указателя в потоке.

/**
 * @param int $offset
 * @param int $whence
 */
public function seek($offset, $whence = SEEK_SET): void;

Если невозможно переместить позицию указателя, будет брошено исключение \RuntimeException.

# rewind

Перемещает позицию указателя в начало потока.

public function rewind(): void;

Если невозможно переместить позицию указателя в начало потока, будет брошено исключение \RuntimeException.

# isWritable

Возвращает true, если поток доступен для записи.

public function isWritable(): bool;

# write

Записывает данные в поток и возвращает количество байтов, записанных в поток.

/**
 * @param string $string
 * @return int
 */
public function write($string): int;

Если не удается записать данные в поток, будет брошено исключение \RuntimeException.

$stream = new Stream('php://temp', 'wb+');
(string) $stream; // ''
$stream->write('content');
(string) $stream; // 'content'

$stream = new Stream('php://temp', 'r');
$stream->write('content'); // throws RuntimeException

# isReadable

Возвращает true, если поток доступен для чтения.

public function isReadable(): bool;

# read

Считывает и возвращает данные из потока по количеству переданных байтов или пустую строку, если нет доступных байтов.

/**
 * @param int $length
 * @return string
 */
public function read($length): string;

Если не удается прочитать данные из потока, будет брошено исключение \RuntimeException.

$stream = new Stream('path/to/file', 'r');
$stream->read(5); // 'File '
$stream->getContents(); // 'content'
(string) $stream; // 'File content'

$stream = new Stream('path/to/file', 'w');
$stream->read(5); // throws RuntimeException

# getContents

Возвращает оставшееся содержимое в строке.

public function getContents(): string;

Если не удается прочитать из потока или при чтении возникает ошибка, будет брошено исключение \RuntimeException.

$stream = new Stream('path/to/file', 'r');
$stream->read(5); // 'File '
$stream->getContents(); // 'content'
(string) $stream; // 'File content'

$stream = new Stream('path/to/file', 'r');
$stream->getContents(); // 'File content'
$stream->getContents(); // ''
(string) $stream; // 'File content'

$stream = new StreamPhpInput('path/to/file');
$stream->getContents(); // 'File content'
$stream->getContents(); // 'File content'
(string) $stream; // 'File content'

$stream = new Stream('path/to/file', 'w');
$stream->getContents(); // throws RuntimeException

# getMetadata

Возвращает метаданные потока в виде ассоциативного массива или извлекает значение по определенному ключу.

/**
 * @param string $key
 * @return array|mixed|null 
 */
public function getMetadata($key = null);

Возвращает ассоциативный массив, если ключ не указан. Возвращает определенное значение ключа, если ключ был передан и значение найдено, или null, если ключ в массиве отсутствует.

$stream = new Stream('php://temp', 'wb+');

$stream->getMetadata();
/*
[
    'wrapper_type' => 'PHP',
    'stream_type' => 'TEMP',
    'mode' => 'w+b',
    'unread_bytes' => 0,
    'seekable' => true,
    'uri' => 'php://temp',
];
*/

$stream->getMetadata('wrapper_type'); // 'PHP'
$stream->getMetadata('stream_type'); // 'TEMP'
$stream->getMetadata('mode'); // 'w+b'
$stream->getMetadata('unread_bytes'); // 0
$stream->getMetadata('seekable'); // true
$stream->getMetadata('uri'); // 'php://temp'

$stream->getMetadata('no-key'); // null