Я определяю класс, одним из свойств которого является объект DateTime. Я хочу установить его значение по умолчанию на временную метку unix «-1». Я также хочу, чтобы это значение по умолчанию было постоянным, чтобы все объекты знали его значение.
Но я не хочу объявлять что-то вроде const PROPERTY_DEFAULT_DATE = '-1';
, поскольку свойство будет объектом DateTime и операциями / функциями, использующими это значение по умолчанию, и свойство будет трудно обрабатывать, если PROPERTY_DEFAULT_DATE не является правильным объектом DateTime.
Итак, могу ли я сделать конкретный экземпляр объекта класса константой внутри другого класса?
В руководстве по PHP сказано
Значение должно быть константным выражением, а не (например) переменной, свойством, результатом математической операции или вызовом функции.
Не упоминает об этом, но я думаю, что это невозможно (пробовал много вариантов, всегда были синтаксические ошибки)
Если это невозможно, какие у меня есть альтернативы?
Изменить: я думаю, мне нужно найти решение проблемы определения "значения по умолчанию" для моего свойства, которое в данном случае является объектом DateTime.
Какое значение по умолчанию будет вам установлен в
__construct()
? (нет, пожалуйста, не NULL, я ожидаю, что должно существовать что-то более элегантное решение) Также имейте в виду, что оно может использоваться в операциях / функциях внутри класса / подкласса Обновление: я последовал совету здесь и создал свойство
private $_DEFAULT_DATE
и получатель для этого. Для этого свойства нет установщика, поэтому я могу быть уверен, что оно не будет изменено. (Конечно, я стараюсь не изменять его в реализации класса)
$nullDate = new DateTime('@-1')
; или я подавляю предупреждения / ошибки с помощью @? - person Sudhi   schedule 06.09.2011$d=new DateTime();//now $u=new DateTime('-1');//ignores the illegal value and returns new DateTime(), ie now $u1=date_create('-1');//ignores the illegal value and returns new DateTime(), ie now $u2=date_create_from_format('U',0);//time=0 $u3=date_create_from_format('U',-1); //returns false
- person dnagirl   schedule 06.09.2011new DateTime(32)
илиnew DateTime('32')
), но если вы добавите его с помощью @, аргумент теперь является строкой, но DateTime создает объект с dateTime = timestamp значение после @ - person Sudhi   schedule 06.09.2011