1) Зачем тебе protected $is_object; если он нигде кроме конструктора не используется?
2) Ты его не тут потерял?, потому что вот так ненаглядно:
$valid = true;
if ((!\is_object($value) || !($value instanceof $this->type))
&& (gettype($value) !== $this->type)) {
throw new IncorrectValueTypeException('Value type does not match "' . $this->type . '"');
}
и valid не используется.
По логике должно бы так:
if ($this->is_object) {
if (!\is_object($value) || !($value instanceof $this->type)) {
$valid = false;
}
} else {
$valid = gettype($value) === $this->type;
}
3) Проверка в конструкторе у тебя странная (хотя этот $is_object и не используется), а что если массив захотят добавить, оно определит что это объект...
4) Я бы использовал именованные конструкторы
public function __construct($type, $is_object = false)
{
$this->type = $type;
$this->is_object = $is_object;
}
public static function getIntegerArray()
{
return new static('integer');
}
public static function getObjectArray($interfaceType)
{
return new static($interfaceType, true);
}
_____________
There never was a struggle in the soul of a good man that was not hard