Я сталкиваюсь с проблемой, с которой, как мне кажется, все сталкиваются с нулем: то есть существуют разные виды нуля.Это может означать «пустой», «неизменный», «неустановленный», «неизвестный» или любое количество вещей.И я дошел до того, что мне нужно как-то различать их.
По сути, у меня есть часть менеджера баз данных моей программы, которая получает объект, представляющий данные для обновления в базе данных, из другой части моей программы.он отвечает за проверку данных формы и преобразование их в указанный объект (который имеет один из нескольких различных классов с конкретными предопределенными свойствами).Мне нужен какой-то способ отличить свойство «null» в этом объекте, что означает «я действительно хочу, чтобы значение null сохранялось в базе данных», и другой тип «null», что означает «если в базе данных есть существующее значение,не меняй это ".Из этих двух последний будет гораздо более распространенным, но мне нужен какой-то способ, чтобы учесть и первое.
Моя текущая мысль, которая кажется наилучшей в этой ситуации, такова:создать новый класс, который представляет каждый тип null, например, класс Unchanged
стихов типа SetToNull
или что-то в этом роде.Тогда я мог бы установить свойство для экземпляра одного из этих классов.
Единственная проблема заключается в том, что я хотел бы, чтобы функция, которая ведет себя подобно существующей функции isset()
, позволяла бы мне проверять обаесли данное свойство существует, а также если оно имеет реальное значение (в отличие от одного из моих новых нулевых типов) в одном простом утверждении.
Я знаю, что могу сделать что-то вроде этого:
if (isset($thing->property) && !($thing->property instanceof Unchanged || $thing->property instanceof SetToNull)){
// do whatever
}
Тем не менее, это явно не идеально, потому что это долго и громоздко, и я не хочу, чтобы это было везде по всей моей кодовой базе.Я бы предпочел что-то вроде этого:
if (myCustomIsset($thing->property)){
// do whatever
}
Однако isset
не кажется нормальной функцией;каким-то образом он подавляет предупреждения, если свойство не было определено или что-то в этом роде, поэтому я сам не уверен, как реализовать что-то подобное.