У меня есть метод класса, который имеет дело с датами:
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?
Это довольно четко заявлено в руководстве PHP по типизации :
Функции теперь могут принудительно превращать параметры в объекты (путем указания имени класса в прототипе функции) или массивы ( начиная с PHP 5.1). Однако, если в качестве значения параметра по умолчанию используется NULL, он будет разрешен в качестве аргумента для любого последующего вызова.
Для меня ваш пример выглядит так, как будто внутри объектов Item будет проверка, был ли параметр null или объект DateTime (if/else). Я бы убрал эту ответственность из объектов Item в пользовательский DateTime, например, расширив DateTime. Этот MyDateTime будет отвечать за определение того, является ли дата "с начала времен" или нет. Для Item нет необходимости делать это.