*/
abstract class AbstractPipes implements PipesInterface
{
- /** @var array */
public $pipes = array();
- /** @var string */
private $inputBuffer = '';
- /** @var resource|scalar|\Iterator|null */
private $input;
- /** @var bool */
private $blocked = true;
+ private $lastError;
+ /**
+ * @param resource|string|int|float|bool|\Iterator|null $input
+ */
public function __construct($input)
{
- if (is_resource($input) || $input instanceof \Iterator) {
+ if (\is_resource($input) || $input instanceof \Iterator) {
$this->input = $input;
- } elseif (is_string($input)) {
+ } elseif (\is_string($input)) {
$this->inputBuffer = $input;
} else {
$this->inputBuffer = (string) $input;
*/
protected function hasSystemCallBeenInterrupted()
{
- $lastError = error_get_last();
+ $lastError = $this->lastError;
+ $this->lastError = null;
// stream_select returns false when the `select` system call is interrupted by an incoming signal
- return isset($lastError['message']) && false !== stripos($lastError['message'], 'interrupted system call');
+ return null !== $lastError && false !== stripos($lastError, 'interrupted system call');
}
/**
foreach ($this->pipes as $pipe) {
stream_set_blocking($pipe, 0);
}
- if (is_resource($this->input)) {
+ if (\is_resource($this->input)) {
stream_set_blocking($this->input, 0);
}
if ($input instanceof \Iterator) {
if (!$input->valid()) {
$input = null;
- } elseif (is_resource($input = $input->current())) {
+ } elseif (\is_resource($input = $input->current())) {
stream_set_blocking($input, 0);
} elseif (!isset($this->inputBuffer[0])) {
- if (!is_string($input)) {
+ if (!\is_string($input)) {
if (!is_scalar($input)) {
- throw new InvalidArgumentException(sprintf('%s yielded a value of type "%s", but only scalars and stream resources are supported', get_class($this->input), gettype($input)));
+ throw new InvalidArgumentException(sprintf('%s yielded a value of type "%s", but only scalars and stream resources are supported', \get_class($this->input), \gettype($input)));
}
$input = (string) $input;
}
$w = array($this->pipes[0]);
// let's have a look if something changed in streams
- if (false === $n = @stream_select($r, $w, $e, 0, 0)) {
+ if (false === @stream_select($r, $w, $e, 0, 0)) {
return;
}
return array($this->pipes[0]);
}
}
+
+ /**
+ * @internal
+ */
+ public function handleError($type, $msg)
+ {
+ $this->lastError = $msg;
+ }
}