Введите вывод подсказок и дополнительные атрибуты в PHP

У меня есть метод класса, который имеет дело с датами:

public function setAvailability(DateTime $start, DateTime $end){
}

Так как доступность объекта может иметь нижний предел, верхний предел, обоих или ни один, я хотел бы сделать setAvailability (), принимают Нулевые значения также. Однако NULL постоянный нарушает вывод подсказок типа:

$foo->setAvailability(NULL, $end);

триггеры:

Фатальная ошибка Catchable: Аргумент 1 передал Foo:: setAvailability () должен быть экземпляром DateTime, данный пустой указатель

И, насколько я знаю, у меня не может быть экземпляра DateTime без значения. (Могу я?)

По причине я не могу схватить, это, кажется, работает:

public function setAvailability(DateTime $start=NULL, DateTime $end=NULL){
}
...
$foo->setAvailability(NULL, $end);

Но это похоже на взлом, который работает чистым шансом.

Как Вы имели бы дело с датами сброса в классах PHP?

14
задан Álvaro González 5 May 2010 в 15:08
поделиться

2 ответа

Это довольно четко заявлено в руководстве PHP по типизации :

Функции теперь могут принудительно превращать параметры в объекты (путем указания имени класса в прототипе функции) или массивы ( начиная с PHP 5.1). Однако, если в качестве значения параметра по умолчанию используется NULL, он будет разрешен в качестве аргумента для любого последующего вызова.

20
ответ дан 1 December 2019 в 12:38
поделиться

Для меня ваш пример выглядит так, как будто внутри объектов Item будет проверка, был ли параметр null или объект DateTime (if/else). Я бы убрал эту ответственность из объектов Item в пользовательский DateTime, например, расширив DateTime. Этот MyDateTime будет отвечать за определение того, является ли дата "с начала времен" или нет. Для Item нет необходимости делать это.

2
ответ дан 1 December 2019 в 12:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: