Skip to content

Commit d23f22a

Browse files
committed
Update PHP language syntax and remove legacy workarounds
1 parent 1f68392 commit d23f22a

14 files changed

+51
-111
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,7 @@ By default, this will call `end()` on the destination stream once the
353353
source stream emits an `end` event. This can be disabled like this:
354354

355355
```php
356-
$source->pipe($dest, array('end' => false));
356+
$source->pipe($dest, ['end' => false]);
357357
```
358358

359359
Note that this only applies to the `end` event.
@@ -1126,7 +1126,7 @@ $through = new ThroughStream(function ($data) {
11261126
});
11271127
$through->on('data', $this->expectCallableOnceWith("[2, true]\n"));
11281128

1129-
$through->write(array(2, true));
1129+
$through->write([2, true]);
11301130
```
11311131

11321132
The callback function is allowed to throw an `Exception`. In this case,

src/CompositeStream.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@ public function __construct(ReadableStreamInterface $readable, WritableStreamInt
2020
return;
2121
}
2222

23-
Util::forwardEvents($this->readable, $this, array('data', 'end', 'error'));
24-
Util::forwardEvents($this->writable, $this, array('drain', 'error', 'pipe'));
23+
Util::forwardEvents($this->readable, $this, ['data', 'end', 'error']);
24+
Util::forwardEvents($this->writable, $this, ['drain', 'error', 'pipe']);
2525

26-
$this->readable->on('close', array($this, 'close'));
27-
$this->writable->on('close', array($this, 'close'));
26+
$this->readable->on('close', [$this, 'close']);
27+
$this->writable->on('close', [$this, 'close']);
2828
}
2929

3030
public function isReadable()
@@ -46,7 +46,7 @@ public function resume()
4646
$this->readable->resume();
4747
}
4848

49-
public function pipe(WritableStreamInterface $dest, array $options = array())
49+
public function pipe(WritableStreamInterface $dest, array $options = [])
5050
{
5151
return Util::pipe($this, $dest, $options);
5252
}

src/DuplexResourceStream.php

Lines changed: 12 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -59,14 +59,9 @@ public function __construct($stream, LoopInterface $loop = null, $readChunkSize
5959
// Use unbuffered read operations on the underlying stream resource.
6060
// Reading chunks from the stream may otherwise leave unread bytes in
6161
// PHP's stream buffers which some event loop implementations do not
62-
// trigger events on (edge triggered).
63-
// This does not affect the default event loop implementation (level
64-
// triggered), so we can ignore platforms not supporting this (HHVM).
65-
// Pipe streams (such as STDIN) do not seem to require this and legacy
66-
// PHP versions cause SEGFAULTs on unbuffered pipe streams, so skip this.
67-
if (\function_exists('stream_set_read_buffer') && !$this->isLegacyPipe($stream)) {
68-
\stream_set_read_buffer($stream, 0);
69-
}
62+
// trigger events on (edge triggered). This does not affect the default
63+
// event loop implementation (level triggered).
64+
\stream_set_read_buffer($stream, 0);
7065

7166
if ($buffer === null) {
7267
$buffer = new WritableResourceStream($stream, $loop);
@@ -77,16 +72,14 @@ public function __construct($stream, LoopInterface $loop = null, $readChunkSize
7772
$this->bufferSize = ($readChunkSize === null) ? 65536 : (int)$readChunkSize;
7873
$this->buffer = $buffer;
7974

80-
$that = $this;
81-
82-
$this->buffer->on('error', function ($error) use ($that) {
83-
$that->emit('error', array($error));
75+
$this->buffer->on('error', function ($error) {
76+
$this->emit('error', [$error]);
8477
});
8578

86-
$this->buffer->on('close', array($this, 'close'));
79+
$this->buffer->on('close', [$this, 'close']);
8780

88-
$this->buffer->on('drain', function () use ($that) {
89-
$that->emit('drain');
81+
$this->buffer->on('drain', function () {
82+
$this->emit('drain');
9083
});
9184

9285
$this->resume();
@@ -113,7 +106,7 @@ public function pause()
113106
public function resume()
114107
{
115108
if (!$this->listening && $this->readable) {
116-
$this->loop->addReadStream($this->stream, array($this, 'handleData'));
109+
$this->loop->addReadStream($this->stream, [$this, 'handleData']);
117110
$this->listening = true;
118111
}
119112
}
@@ -163,7 +156,7 @@ public function end($data = null)
163156
$this->buffer->end($data);
164157
}
165158

166-
public function pipe(WritableStreamInterface $dest, array $options = array())
159+
public function pipe(WritableStreamInterface $dest, array $options = [])
167160
{
168161
return Util::pipe($this, $dest, $options);
169162
}
@@ -187,41 +180,17 @@ public function handleData($stream)
187180
\restore_error_handler();
188181

189182
if ($error !== null) {
190-
$this->emit('error', array(new \RuntimeException('Unable to read from stream: ' . $error->getMessage(), 0, $error)));
183+
$this->emit('error', [new \RuntimeException('Unable to read from stream: ' . $error->getMessage(), 0, $error)]);
191184
$this->close();
192185
return;
193186
}
194187

195188
if ($data !== '') {
196-
$this->emit('data', array($data));
189+
$this->emit('data', [$data]);
197190
} elseif (\feof($this->stream)) {
198191
// no data read => we reached the end and close the stream
199192
$this->emit('end');
200193
$this->close();
201194
}
202195
}
203-
204-
/**
205-
* Returns whether this is a pipe resource in a legacy environment
206-
*
207-
* This works around a legacy PHP bug (#61019) that was fixed in PHP 5.4.28+
208-
* and PHP 5.5.12+ and newer.
209-
*
210-
* @param resource $resource
211-
* @return bool
212-
* @link https://github.com/reactphp/child-process/issues/40
213-
*
214-
* @codeCoverageIgnore
215-
*/
216-
private function isLegacyPipe($resource)
217-
{
218-
if (\PHP_VERSION_ID < 50428 || (\PHP_VERSION_ID >= 50500 && \PHP_VERSION_ID < 50512)) {
219-
$meta = \stream_get_meta_data($resource);
220-
221-
if (isset($meta['stream_type']) && $meta['stream_type'] === 'STDIO') {
222-
return true;
223-
}
224-
}
225-
return false;
226-
}
227196
}

src/ReadableResourceStream.php

Lines changed: 7 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -61,14 +61,9 @@ public function __construct($stream, LoopInterface $loop = null, $readChunkSize
6161
// Use unbuffered read operations on the underlying stream resource.
6262
// Reading chunks from the stream may otherwise leave unread bytes in
6363
// PHP's stream buffers which some event loop implementations do not
64-
// trigger events on (edge triggered).
65-
// This does not affect the default event loop implementation (level
66-
// triggered), so we can ignore platforms not supporting this (HHVM).
67-
// Pipe streams (such as STDIN) do not seem to require this and legacy
68-
// PHP versions cause SEGFAULTs on unbuffered pipe streams, so skip this.
69-
if (\function_exists('stream_set_read_buffer') && !$this->isLegacyPipe($stream)) {
70-
\stream_set_read_buffer($stream, 0);
71-
}
64+
// trigger events on (edge triggered). This does not affect the default
65+
// event loop implementation (level triggered).
66+
\stream_set_read_buffer($stream, 0);
7267

7368
$this->stream = $stream;
7469
$this->loop = $loop ?: Loop::get();
@@ -93,12 +88,12 @@ public function pause()
9388
public function resume()
9489
{
9590
if (!$this->listening && !$this->closed) {
96-
$this->loop->addReadStream($this->stream, array($this, 'handleData'));
91+
$this->loop->addReadStream($this->stream, [$this, 'handleData']);
9792
$this->listening = true;
9893
}
9994
}
10095

101-
public function pipe(WritableStreamInterface $dest, array $options = array())
96+
public function pipe(WritableStreamInterface $dest, array $options = [])
10297
{
10398
return Util::pipe($this, $dest, $options);
10499
}
@@ -139,41 +134,17 @@ public function handleData()
139134
\restore_error_handler();
140135

141136
if ($error !== null) {
142-
$this->emit('error', array(new \RuntimeException('Unable to read from stream: ' . $error->getMessage(), 0, $error)));
137+
$this->emit('error', [new \RuntimeException('Unable to read from stream: ' . $error->getMessage(), 0, $error)]);
143138
$this->close();
144139
return;
145140
}
146141

147142
if ($data !== '') {
148-
$this->emit('data', array($data));
143+
$this->emit('data', [$data]);
149144
} elseif (\feof($this->stream)) {
150145
// no data read => we reached the end and close the stream
151146
$this->emit('end');
152147
$this->close();
153148
}
154149
}
155-
156-
/**
157-
* Returns whether this is a pipe resource in a legacy environment
158-
*
159-
* This works around a legacy PHP bug (#61019) that was fixed in PHP 5.4.28+
160-
* and PHP 5.5.12+ and newer.
161-
*
162-
* @param resource $resource
163-
* @return bool
164-
* @link https://github.com/reactphp/child-process/issues/40
165-
*
166-
* @codeCoverageIgnore
167-
*/
168-
private function isLegacyPipe($resource)
169-
{
170-
if (\PHP_VERSION_ID < 50428 || (\PHP_VERSION_ID >= 50500 && \PHP_VERSION_ID < 50512)) {
171-
$meta = \stream_get_meta_data($resource);
172-
173-
if (isset($meta['stream_type']) && $meta['stream_type'] === 'STDIO') {
174-
return true;
175-
}
176-
}
177-
return false;
178-
}
179150
}

src/ReadableStreamInterface.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ public function resume();
278278
* source stream emits an `end` event. This can be disabled like this:
279279
*
280280
* ```php
281-
* $source->pipe($dest, array('end' => false));
281+
* $source->pipe($dest, ['end' => false]);
282282
* ```
283283
*
284284
* Note that this only applies to the `end` event.
@@ -322,7 +322,7 @@ public function resume();
322322
* @param array $options
323323
* @return WritableStreamInterface $dest stream as-is
324324
*/
325-
public function pipe(WritableStreamInterface $dest, array $options = array());
325+
public function pipe(WritableStreamInterface $dest, array $options = []);
326326

327327
/**
328328
* Closes the stream (forcefully).

src/ThroughStream.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
* });
4949
* $through->on('data', $this->expectCallableOnceWith("[2, true]\n"));
5050
*
51-
* $through->write(array(2, true));
51+
* $through->write([2, true]);
5252
* ```
5353
*
5454
* The callback function is allowed to throw an `Exception`. In this case,
@@ -108,7 +108,7 @@ public function resume()
108108
}
109109
}
110110

111-
public function pipe(WritableStreamInterface $dest, array $options = array())
111+
public function pipe(WritableStreamInterface $dest, array $options = [])
112112
{
113113
return Util::pipe($this, $dest, $options);
114114
}
@@ -133,14 +133,14 @@ public function write($data)
133133
try {
134134
$data = \call_user_func($this->callback, $data);
135135
} catch (\Exception $e) {
136-
$this->emit('error', array($e));
136+
$this->emit('error', [$e]);
137137
$this->close();
138138

139139
return false;
140140
}
141141
}
142142

143-
$this->emit('data', array($data));
143+
$this->emit('data', [$data]);
144144

145145
// emit drain event on next resume if currently paused (throttled)
146146
if ($this->paused) {

src/Util.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ final class Util
1313
* @return WritableStreamInterface $dest stream as-is
1414
* @see ReadableStreamInterface::pipe() for more details
1515
*/
16-
public static function pipe(ReadableStreamInterface $source, WritableStreamInterface $dest, array $options = array())
16+
public static function pipe(ReadableStreamInterface $source, WritableStreamInterface $dest, array $options = [])
1717
{
1818
// source not readable => NO-OP
1919
if (!$source->isReadable()) {
@@ -27,7 +27,7 @@ public static function pipe(ReadableStreamInterface $source, WritableStreamInter
2727
return $dest;
2828
}
2929

30-
$dest->emit('pipe', array($source));
30+
$dest->emit('pipe', [$source]);
3131

3232
// forward all source data events as $dest->write()
3333
$source->on('data', $dataer = function ($data) use ($source, $dest) {

src/WritableResourceStream.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public function write($data)
6868
if (!$this->listening && $this->data !== '') {
6969
$this->listening = true;
7070

71-
$this->loop->addWriteStream($this->stream, array($this, 'handleWrite'));
71+
$this->loop->addWriteStream($this->stream, [$this, 'handleWrite']);
7272
}
7373

7474
return !isset($this->data[$this->softLimit - 1]);
@@ -137,7 +137,7 @@ public function handleWrite()
137137
// Should this turn out to be a permanent error later, it will eventually
138138
// send *nothing* and we can detect this.
139139
if (($sent === 0 || $sent === false) && $error !== null) {
140-
$this->emit('error', array(new \RuntimeException('Unable to write to stream: ' . $error)));
140+
$this->emit('error', [new \RuntimeException('Unable to write to stream: ' . $error)]);
141141
$this->close();
142142

143143
return;

tests/CompositeStreamTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ public function itShouldReceiveForwardedEvents()
217217
$composite->on('data', $this->expectCallableOnce());
218218
$composite->on('drain', $this->expectCallableOnce());
219219

220-
$readable->emit('data', array('foo'));
220+
$readable->emit('data', ['foo']);
221221
$writable->emit('drain');
222222
}
223223

@@ -241,7 +241,7 @@ public function itShouldHandlePipingCorrectly()
241241

242242
$input = new ThroughStream();
243243
$input->pipe($composite);
244-
$input->emit('data', array('foo'));
244+
$input->emit('data', ['foo']);
245245
}
246246

247247
/** @test */
@@ -262,6 +262,6 @@ public function itShouldForwardPipeCallsToReadableStream()
262262
->with('foo');
263263

264264
$composite->pipe($output);
265-
$readable->emit('data', array('foo'));
265+
$readable->emit('data', ['foo']);
266266
}
267267
}

tests/DuplexResourceStreamTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -427,7 +427,7 @@ public function testBufferEventsShouldBubbleUp()
427427
$conn->on('error', $this->expectCallableOnce());
428428

429429
$buffer->emit('drain');
430-
$buffer->emit('error', array(new \RuntimeException('Whoops')));
430+
$buffer->emit('error', [new \RuntimeException('Whoops')]);
431431
}
432432

433433
/**

tests/Stub/ReadableStreamStub.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,19 @@ public function isReadable()
2020
// trigger data event
2121
public function write($data)
2222
{
23-
$this->emit('data', array($data));
23+
$this->emit('data', [$data]);
2424
}
2525

2626
// trigger error event
2727
public function error($error)
2828
{
29-
$this->emit('error', array($error));
29+
$this->emit('error', [$error]);
3030
}
3131

3232
// trigger end event
3333
public function end()
3434
{
35-
$this->emit('end', array());
35+
$this->emit('end', []);
3636
}
3737

3838
public function pause()
@@ -52,7 +52,7 @@ public function close()
5252
$this->emit('close');
5353
}
5454

55-
public function pipe(WritableStreamInterface $dest, array $options = array())
55+
public function pipe(WritableStreamInterface $dest, array $options = [])
5656
{
5757
Util::pipe($this, $dest, $options);
5858

tests/ThroughStreamTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ public function pipingStuffIntoItShouldWork()
185185
$through->on('data', $this->expectCallableOnceWith('foo'));
186186

187187
$readable->pipe($through);
188-
$readable->emit('data', array('foo'));
188+
$readable->emit('data', ['foo']);
189189
}
190190

191191
/** @test */
@@ -243,7 +243,7 @@ public function writeAfterEndShouldReturnFalse()
243243
public function writeDataWillCloseStreamShouldReturnFalse()
244244
{
245245
$through = new ThroughStream();
246-
$through->on('data', array($through, 'close'));
246+
$through->on('data', [$through, 'close']);
247247

248248
$this->assertFalse($through->write('foo'));
249249
}

0 commit comments

Comments
 (0)