Мне действительно не нужно хранить объект DateTime
. Можно ли позвонить modify
анонимно? Я пробовал:
$passwordRequest->setExpire((new \DateTime())->modify('+12 hours'));
Но не могу заставить его работать. Я прошу луну?
Мне действительно не нужно хранить объект DateTime
. Можно ли позвонить modify
анонимно? Я пробовал:
$passwordRequest->setExpire((new \DateTime())->modify('+12 hours'));
Но не могу заставить его работать. Я прошу луну?
Это ограничение PHP (во всяком случае, я так считаю), что вы должны вызывать методы для переменной. Другими словами, то, что вы пытаетесь сделать, невозможно.
В этом конкретном случае вы можете использовать date_modify()
вместо этого:
passwordRequest->setExpire(date_modify(new DateTime(), '+12 hours'));
Тестирование:
var_dump(date_modify(new DateTime(), '+12 hours'));
object(DateTime)#2 (3) {
["date"]=>
string(19) "2011-11-19 04:16:04"
["timezone_type"]=>
int(3)
["timezone"]=>
string(15) "America/Chicago"
}
Как упоминалось в связанном дублирующем вопросе, вы не можете связать методы с экземпляром new
.
Согласно PHP, похоже, что вы можете вызывать modify() статически, но я пробовал, и это не сработает. Похоже, DateTime нужно создать, потому что конструктор принимает дату.
// According to PHP looks like it should work, but doesn't
$passwordRequest->setExpire((DateTime::modify('+12 hours'));
// Notice I have to pass a date to the construct when I instantiate
$date = new DateTime('2006-12-12');
$date->modify('+1 day');
Лучшей реализацией было бы сделать mod() статическим с двумя аргументами, один для даты и один для настройки времени, что-то вроде:
public static function modify($timeAdjust, $time = time())
ClassName::methodName
. Это не подразумевает статический метод. Статические методы имеют ключевое слово static
в сигнатуре метода, ср. php.net/manual/en/datetime.createfromformat.php
- person Gordon; 19.11.2011