Mercurial > hg > isophonics-drupal-site
comparison vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4c8ae668cc8c |
---|---|
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 } |