Meta
Whenever a stream component is created, a new meta Repository
is assigned to it. It contains various values obtained by PHP's stream_get_meta_data()
and fstat()
. The meta repository can also be used to assign arbitrary data or information to a stream, which can be useful in situations when working with multiple streams at the same time and require some additional information to be associated with each.
$stream = FileStream::open('people.txt', 'rb');
$meta = $stream->meta();
echo $meta->get('stats.size'); // 12
Raw meta always merged
The "raw" meta-data that is provided by rawMeta()
(see method description below). This data is ALWAYS merged into the meta Repository
instance, whenever you invoke the meta()
method.
Raw Meta
Each stream instance comes with the ability to obtain the underlying resource's "meta-data", using PHP's stream_get_meta_data()
and fstat()
methods.
To acquire a raw version of this meta-data, use the rawMeta()
method.
$stream = FileStream::open('people.txt', 'rb');
$rawMeta = $stream->rawMeta(); // array
Note As previously mentioned, this method is always invoked and its output is automatically merged into the meta Repository
, whenever the meta()
method is called!
Assign Arbitrary Meta-Data
To assign arbitrary meta-data to a stream, use the setMetaRepository()
. The method can accept the following types as argument:
array
: associate array, containing key-value pairs.\Aedart\Contracts\Streams\Meta\Repository
: A metaRepository
instance.null
: If null is given, then a new metaRepository
instance will automatically be set.
$stream = FileStream::open('people.txt', 'rb')
->setMetaRepository([
'acme.foo' => 'bar'
]);
$meta = $stream->meta();
echo $meta->get('acme.foo'); // bar
Alternative
Alternatively, you may also specify custom arbitrary data directly in the meta Repository
, using it's set()
method.
$stream->meta()->set('acme.bar', 'foo');
echo $stream->meta()->get('acme.bar'); // foo
Caution
You SHOULD always prefix your arbitrary meta-data keys, to avoid accidental naming conflicts and overwrites with values provided by rawMeta()
.