Luminova Framework

PHP Luminova: PSR Stream Interface Implementation and Management

Last updated: 2025-04-25 10:06:00

The Stream class provides a robust interface for working with stream resources. It supports various stream operations such as reading, writing, seeking, and managing metadata.

The Stream class provides a robust interface for working with stream resources in a consistent manner. It implements the \Stringable interface, allowing the object to be easily converted to a string. While the class supports all methods defined by the PSR StreamInterface, it is intentionally not implemented as a PSR interface. This design choice allows for seamless integration in cURL network client response without requiring the installation of PSR client libraries, making it ideal for simple network request implementations.


Class Definition

  • Class namespace: \Luminova\Storages\Stream
  • This class implements: \Stringable

Examples

Basic Usage

Here's how to create a stream and use its methods:

use Luminova\Storages\Stream;

// Create a stream from a string
$stream = new Stream(fopen('php://temp', 'r+'));
$stream->write("Hello, Luminova!");

// Read the contents of the stream
$stream->rewind();
echo $stream->toString(); // Output: Hello, Luminova!

Get the size of the stream:

echo $stream->getSize(); // Output: 19

Check if the stream is writable:

if ($stream->isWritable()) {
    $stream->write(" Adding more data.");
}

Read remaining contents

$stream->rewind();
echo $stream->getContents(); // Output: Hello, Luminova! Adding more data.

// Close the stream
$stream->close();

Advanced Usage

You can extend the Stream class and implement the PSR StreamInterface if needed. Here's an example:

// /app/Utils/MyStream.php

<?php
namespace App\Utils;

use Luminova\Storages\Stream;
use Psr\Http\Message\StreamInterface;

class MyStream extends Stream implements StreamInterface
{
    // Override the default method implementation
    public function close(): void
    {
        if(something){
            $this->doThat();
        }
        // Then call parent method if necessary
        parent::close();
    }

    // Additional methods can be implemented here as needed
}

Methods

constructor

Initialize the stream constructor with an underlying resource.

public __construct(private resource $resource): mixed

Parameters:

ParameterTypeDescription
$resourceresourceThe stream resource.

Throws:


toString

Reads the entire stream and returns it contents as string.

public toString(): string

Return Value:

string - Return the contents of the stream.


close

Closes the stream and releases any resources associated with it.

public close(): void

detach

Detaches the underlying resource from the stream.

public detach(): ?resource

Return Value:

resource|null - Return the detached resource, or null if none is present.


getSize

Retrieves the size of the stream in bytes.

public getSize(): ?int

Return Value:

int|null - Return the size of the stream, or null if the size cannot be determined.


tell

Retrieves the current position of the stream pointer.

public tell(): int

Return Value:

int - Return the position of the stream pointer.

Throws:


eof

Determines if the stream has reached the end of file.

public eof(): bool

Return Value:

bool - Return true if the stream is at EOF, false otherwise.


isSeekable

Checks if the stream is seekable.

public isSeekable(): bool

Return Value:

bool - Return true if the stream is seekable, false otherwise.


seek

Seeks to a position within the stream.

public seek(int $offset, int $whence = SEEK_SET): void

Parameters:

ParameterTypeDescription
$offsetintThe position to seek to.
$whenceintThe seek mode (default: SEEK_SET).

Throws:


rewind

Rewinds the stream to the beginning.

public rewind(): void

Throws:


isWritable

Checks if the stream is writable.

public isWritable(): bool

Return Value:

bool - Return true if the stream is writable, false otherwise.


write

Writes data to the stream.

public write(string $string): int

Parameters:

ParameterTypeDescription
$stringstringThe data to write.

Return Value:

int - Return the number of bytes written to the stream.

Throws:


isReadable

Checks if the stream is readable.

public isReadable(): bool

Return Value:

bool - Return true if the stream is readable, false otherwise.


read

Reads data from the stream.

public read(int $length): string

Parameters:

ParameterTypeDescription
$lengthintThe number of bytes to read.

Return Value:

string - Return the data read from the stream.

Throws:


getContents

Retrieves the remaining contents of the stream as a string.

public getContents(): string

Return Value:

string - Return the remaining contents of the stream.

Throws:


getMetadata

Retrieves metadata about the stream or a specific key from the metadata array.

public getMetadata(string|null $key = null): mixed

Parameters:

ParameterTypeDescription
$keystring|nullThe specific metadata key to retrieve, or null to retrieve all metadata.

Return Value:

mixed - Return the metadata value for the specified key, an array of all metadata if key is NULL, otherwise null or empty array.