Skip to content

Commit fa8bd58

Browse files
committed
Enforce return type hints on all functions and require PHP 7.1+ as a consequence
With reactphp#138 requiring PHP 7.0 as a minimum we can now add return type hints to all our public and private functions. To give all functions return type hints we need the `void` return type, which isn't available until PHP 7.1. So in order use that we also have to bump the the minimum required PHP version for this package to PHP 7.1. The benefit of return type hints is the ensurance at language level of our return values. For ourselfs and our consumers.
1 parent e49defd commit fa8bd58

12 files changed

+68
-68
lines changed

.travis.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
language: php
22

33
php:
4-
- 7.0
54
- 7.1
65
- 7.2
76
- 7.3

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
{"name": "Jan Sorgalla", "email": "[email protected]"}
77
],
88
"require": {
9-
"php": ">=7.0.0"
9+
"php": ">=7.1.0"
1010
},
1111
"require-dev": {
1212
"phpunit/phpunit": "~6.4"

src/Deferred.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@ public function __construct(callable $canceller = null)
1414
$this->canceller = $canceller;
1515
}
1616

17-
public function promise()
17+
public function promise(): PromiseInterface
1818
{
1919
if (null === $this->promise) {
2020
$canceller = $this->canceller;
2121
$this->canceller = null;
2222

23-
$this->promise = new Promise(function ($resolve, $reject) {
23+
$this->promise = new Promise(function ($resolve, $reject): void {
2424
$this->resolveCallback = $resolve;
2525
$this->rejectCallback = $reject;
2626
}, $canceller);
@@ -29,14 +29,14 @@ public function promise()
2929
return $this->promise;
3030
}
3131

32-
public function resolve($value = null)
32+
public function resolve($value = null): void
3333
{
3434
$this->promise();
3535

3636
\call_user_func($this->resolveCallback, $value);
3737
}
3838

39-
public function reject(\Throwable $reason)
39+
public function reject(\Throwable $reason): void
4040
{
4141
$this->promise();
4242

src/Exception/CompositeException.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public function __construct(array $throwables, $message = '', $code = 0, $previo
2323
/**
2424
* @return \Throwable[]
2525
*/
26-
public function getThrowables()
26+
public function getThrowables(): array
2727
{
2828
return $this->throwables;
2929
}

src/FulfilledPromise.php

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@ public function __construct($value = null)
1515
$this->value = $value;
1616
}
1717

18-
public function then(callable $onFulfilled = null, callable $onRejected = null)
18+
public function then(callable $onFulfilled = null, callable $onRejected = null): PromiseInterface
1919
{
2020
if (null === $onFulfilled) {
2121
return $this;
2222
}
2323

24-
return new Promise(function (callable $resolve, callable $reject) use ($onFulfilled) {
25-
enqueue(function () use ($resolve, $reject, $onFulfilled) {
24+
return new Promise(function (callable $resolve, callable $reject) use ($onFulfilled): void {
25+
enqueue(function () use ($resolve, $reject, $onFulfilled): void {
2626
try {
2727
$resolve($onFulfilled($this->value));
2828
} catch (\Throwable $exception) {
@@ -32,7 +32,7 @@ public function then(callable $onFulfilled = null, callable $onRejected = null)
3232
});
3333
}
3434

35-
public function done(callable $onFulfilled = null, callable $onRejected = null)
35+
public function done(callable $onFulfilled = null, callable $onRejected = null): void
3636
{
3737
if (null === $onFulfilled) {
3838
return;
@@ -51,21 +51,21 @@ public function done(callable $onFulfilled = null, callable $onRejected = null)
5151
});
5252
}
5353

54-
public function otherwise(callable $onRejected)
54+
public function otherwise(callable $onRejected): PromiseInterface
5555
{
5656
return $this;
5757
}
5858

59-
public function always(callable $onFulfilledOrRejected)
59+
public function always(callable $onFulfilledOrRejected): PromiseInterface
6060
{
61-
return $this->then(function ($value) use ($onFulfilledOrRejected) {
61+
return $this->then(function ($value) use ($onFulfilledOrRejected): PromiseInterface {
6262
return resolve($onFulfilledOrRejected())->then(function () use ($value) {
6363
return $value;
6464
});
6565
});
6666
}
6767

68-
public function cancel()
68+
public function cancel(): void
6969
{
7070
}
7171
}

src/Internal/CancellationQueue.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ final class CancellationQueue
1010
private $started = false;
1111
private $queue = [];
1212

13-
public function __invoke()
13+
public function __invoke(): void
1414
{
1515
if ($this->started) {
1616
return;
@@ -20,7 +20,7 @@ public function __invoke()
2020
$this->drain();
2121
}
2222

23-
public function enqueue($cancellable)
23+
public function enqueue($cancellable): void
2424
{
2525
if (!\method_exists($cancellable, 'then') || !\method_exists($cancellable, 'cancel')) {
2626
return;
@@ -33,7 +33,7 @@ public function enqueue($cancellable)
3333
}
3434
}
3535

36-
private function drain()
36+
private function drain(): void
3737
{
3838
for ($i = \key($this->queue); isset($this->queue[$i]); $i++) {
3939
$cancellable = $this->queue[$i];

src/Internal/Queue.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@ final class Queue
99
{
1010
private $queue = [];
1111

12-
public function enqueue(callable $task)
12+
public function enqueue(callable $task): void
1313
{
1414
if (1 === \array_push($this->queue, $task)) {
1515
$this->drain();
1616
}
1717
}
1818

19-
private function drain()
19+
private function drain(): void
2020
{
2121
for ($i = \key($this->queue); isset($this->queue[$i]); $i++) {
2222
$task = $this->queue[$i];

src/Promise.php

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public function __construct(callable $resolver, callable $canceller = null)
1717
$this->call($resolver);
1818
}
1919

20-
public function then(callable $onFulfilled = null, callable $onRejected = null)
20+
public function then(callable $onFulfilled = null, callable $onRejected = null): PromiseInterface
2121
{
2222
if (null !== $this->result) {
2323
return $this->result->then($onFulfilled, $onRejected);
@@ -38,10 +38,11 @@ public function then(callable $onFulfilled = null, callable $onRejected = null)
3838
});
3939
}
4040

41-
public function done(callable $onFulfilled = null, callable $onRejected = null)
41+
public function done(callable $onFulfilled = null, callable $onRejected = null): void
4242
{
4343
if (null !== $this->result) {
44-
return $this->result->done($onFulfilled, $onRejected);
44+
$this->result->done($onFulfilled, $onRejected);
45+
return;
4546
}
4647

4748
$this->handlers[] = function (PromiseInterface $promise) use ($onFulfilled, $onRejected) {
@@ -50,7 +51,7 @@ public function done(callable $onFulfilled = null, callable $onRejected = null)
5051
};
5152
}
5253

53-
public function otherwise(callable $onRejected)
54+
public function otherwise(callable $onRejected): PromiseInterface
5455
{
5556
return $this->then(null, function ($reason) use ($onRejected) {
5657
if (!_checkTypehint($onRejected, $reason)) {
@@ -61,7 +62,7 @@ public function otherwise(callable $onRejected)
6162
});
6263
}
6364

64-
public function always(callable $onFulfilledOrRejected)
65+
public function always(callable $onFulfilledOrRejected): PromiseInterface
6566
{
6667
return $this->then(function ($value) use ($onFulfilledOrRejected) {
6768
return resolve($onFulfilledOrRejected())->then(function () use ($value) {
@@ -74,7 +75,7 @@ public function always(callable $onFulfilledOrRejected)
7475
});
7576
}
7677

77-
public function cancel()
78+
public function cancel(): void
7879
{
7980
$canceller = $this->canceller;
8081
$this->canceller = null;
@@ -109,7 +110,7 @@ public function cancel()
109110
}
110111
}
111112

112-
private function resolver(callable $onFulfilled = null, callable $onRejected = null)
113+
private function resolver(callable $onFulfilled = null, callable $onRejected = null): callable
113114
{
114115
return function ($resolve, $reject) use ($onFulfilled, $onRejected) {
115116
$this->handlers[] = function (PromiseInterface $promise) use ($onFulfilled, $onRejected, $resolve, $reject) {
@@ -120,7 +121,7 @@ private function resolver(callable $onFulfilled = null, callable $onRejected = n
120121
};
121122
}
122123

123-
private function resolve($value = null)
124+
private function resolve($value = null): void
124125
{
125126
if (null !== $this->result) {
126127
return;
@@ -129,7 +130,7 @@ private function resolve($value = null)
129130
$this->settle(resolve($value));
130131
}
131132

132-
private function reject(\Throwable $reason)
133+
private function reject(\Throwable $reason): void
133134
{
134135
if (null !== $this->result) {
135136
return;
@@ -138,7 +139,7 @@ private function reject(\Throwable $reason)
138139
$this->settle(reject($reason));
139140
}
140141

141-
private function settle(PromiseInterface $result)
142+
private function settle(PromiseInterface $result): void
142143
{
143144
$result = $this->unwrap($result);
144145

@@ -165,7 +166,7 @@ private function settle(PromiseInterface $result)
165166
}
166167
}
167168

168-
private function unwrap($promise)
169+
private function unwrap($promise): PromiseInterface
169170
{
170171
while ($promise instanceof self && null !== $promise->result) {
171172
$promise = $promise->result;
@@ -174,7 +175,7 @@ private function unwrap($promise)
174175
return $promise;
175176
}
176177

177-
private function call(callable $callback)
178+
private function call(callable $callback): void
178179
{
179180
// Use reflection to inspect number of arguments expected by this callback.
180181
// We did some careful benchmarking here: Using reflection to avoid unneeded

src/PromiseInterface.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ interface PromiseInterface
3232
* @param callable|null $onRejected
3333
* @return PromiseInterface
3434
*/
35-
public function then(callable $onFulfilled = null, callable $onRejected = null);
35+
public function then(?callable $onFulfilled = null, ?callable $onRejected = null): PromiseInterface;
3636

3737
/**
3838
* Consumes the promise's ultimate value if the promise fulfills, or handles the
@@ -48,7 +48,7 @@ public function then(callable $onFulfilled = null, callable $onRejected = null);
4848
* @param callable|null $onRejected
4949
* @return void
5050
*/
51-
public function done(callable $onFulfilled = null, callable $onRejected = null);
51+
public function done(callable $onFulfilled = null, callable $onRejected = null): void;
5252

5353
/**
5454
* Registers a rejection handler for promise. It is a shortcut for:
@@ -63,7 +63,7 @@ public function done(callable $onFulfilled = null, callable $onRejected = null);
6363
* @param callable $onRejected
6464
* @return PromiseInterface
6565
*/
66-
public function otherwise(callable $onRejected);
66+
public function otherwise(callable $onRejected): PromiseInterface;
6767

6868
/**
6969
* Allows you to execute "cleanup" type tasks in a promise chain.
@@ -110,7 +110,7 @@ public function otherwise(callable $onRejected);
110110
* @param callable $onFulfilledOrRejected
111111
* @return PromiseInterface
112112
*/
113-
public function always(callable $onFulfilledOrRejected);
113+
public function always(callable $onFulfilledOrRejected): PromiseInterface;
114114

115115
/**
116116
* The `cancel()` method notifies the creator of the promise that there is no
@@ -121,5 +121,5 @@ public function always(callable $onFulfilledOrRejected);
121121
*
122122
* @return void
123123
*/
124-
public function cancel();
124+
public function cancel(): void;
125125
}

src/PromisorInterface.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,5 @@ interface PromisorInterface
99
*
1010
* @return PromiseInterface
1111
*/
12-
public function promise();
12+
public function promise(): PromiseInterface;
1313
}

0 commit comments

Comments
 (0)