PluginProbe
StockPack – Stock photos and AI images from Unsplash, Adobe Stock, Freepik and more / 2.4.2
StockPack – Stock photos and AI images from Unsplash, Adobe Stock, Freepik and more v2.4.2
3.7.2 3.7.1 3.7.0 3.6.0 3.6.1 3.5.2 trunk 2.0 2.1 2.2 2.3 2.4 2.4.1 2.4.2 2.4.3 2.5.0 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.6.0 2.6.1 All 73 releases
stockpack / vendor / guzzlehttp / psr7 / src / StreamDecoratorTrait.php

StreamDecoratorTrait.php in StockPack – Stock photos and AI images from Unsplash, Adobe Stock, Freepik and more 2.4.2, at vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php

150 lines 3.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace GuzzleHttp\Psr7;
3
4 use Psr\Http\Message\StreamInterface;
5
6 /**
7 * Stream decorator trait
8 * @property StreamInterface stream
9 */
10 trait StreamDecoratorTrait
11 {
12 /**
13 * @param StreamInterface $stream Stream to decorate
14 */
15 public function __construct(StreamInterface $stream)
16 {
17 $this->stream = $stream;
18 }
19
20 /**
21 * Magic method used to create a new stream if streams are not added in
22 * the constructor of a decorator (e.g., LazyOpenStream).
23 *
24 * @param string $name Name of the property (allows "stream" only).
25 *
26 * @return StreamInterface
27 */
28 public function __get($name)
29 {
30 if ($name == 'stream') {
31 $this->stream = $this->createStream();
32 return $this->stream;
33 }
34
35 throw new \UnexpectedValueException("$name not found on class");
36 }
37
38 public function __toString()
39 {
40 try {
41 if ($this->isSeekable()) {
42 $this->seek(0);
43 }
44 return $this->getContents();
45 } catch (\Exception $e) {
46 // Really, PHP? https://bugs.php.net/bug.php?id=53648
47 trigger_error('StreamDecorator::__toString exception: '
48 . (string) $e, E_USER_ERROR);
49 return '';
50 }
51 }
52
53 public function getContents()
54 {
55 return copy_to_string($this);
56 }
57
58 /**
59 * Allow decorators to implement custom methods
60 *
61 * @param string $method Missing method name
62 * @param array $args Method arguments
63 *
64 * @return mixed
65 */
66 public function __call($method, array $args)
67 {
68 $result = call_user_func_array([$this->stream, $method], $args);
69
70 // Always return the wrapped object if the result is a return $this
71 return $result === $this->stream ? $this : $result;
72 }
73
74 public function close()
75 {
76 $this->stream->close();
77 }
78
79 public function getMetadata($key = null)
80 {
81 return $this->stream->getMetadata($key);
82 }
83
84 public function detach()
85 {
86 return $this->stream->detach();
87 }
88
89 public function getSize()
90 {
91 return $this->stream->getSize();
92 }
93
94 public function eof()
95 {
96 return $this->stream->eof();
97 }
98
99 public function tell()
100 {
101 return $this->stream->tell();
102 }
103
104 public function isReadable()
105 {
106 return $this->stream->isReadable();
107 }
108
109 public function isWritable()
110 {
111 return $this->stream->isWritable();
112 }
113
114 public function isSeekable()
115 {
116 return $this->stream->isSeekable();
117 }
118
119 public function rewind()
120 {
121 $this->seek(0);
122 }
123
124 public function seek($offset, $whence = SEEK_SET)
125 {
126 $this->stream->seek($offset, $whence);
127 }
128
129 public function read($length)
130 {
131 return $this->stream->read($length);
132 }
133
134 public function write($string)
135 {
136 return $this->stream->write($string);
137 }
138
139 /**
140 * Implement in subclasses to dynamically create streams when requested.
141 *
142 * @return StreamInterface
143 * @throws \BadMethodCallException
144 */
145 protected function createStream()
146 {
147 throw new \BadMethodCallException('Not implemented');
148 }
149 }
150