Тип подсказки и несколько конструкторов

Я изучал новые функции для PHP7 и подумал, что мог бы начать готовить свой проект к новым функциям, которые он вводит, например, к хинтингу скалярных типов.

Одной из первых проблем, с которыми я столкнулся, были мои конструкторы в разных классах. У меня есть некоторые общие компрессоры, которые действуют примерно так:

public function __construct($data = null) {
if (is_numeric($data)) {
$this->controller->createById($data);
}
elseif (is_array($data)) {
$this->controller->createByArray($data);
}
elseif (strlen($data) > 0) {
$this->controller->createByUrl($data);
}
}

Введение подсказок типа для этого метода, конечно, приведет к ошибкам во всех направлениях.

Насколько я знаю, PHP7 не предоставляет поддержку нескольких конструкторов. Есть ли способы обойти эту проблему, или это одно из ограничений языка?

8

Решение

Правильно, это одно из ограничений языка.
strlen() > 0 во всяком случае, не может быть проверено с помощью типа. Это автоматически приводит к строке … так что ваш метод допускает все, кроме «», null и false?)

Как правило, в проекте есть RFC для расширения шрифтов PHP в 7.1:
https://wiki.php.net/rfc/union_types

Это позволило бы вам написать int | float | array | string $data = null,

6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]