2011-11-18 3 views
0

Мне действительно не нужно хранить DateTime объект. Можно ли позвонить modify анонимно? Я пробовал:Анонимный вызов объекта в PHP?

$passwordRequest->setExpire((new \DateTime())->modify('+12 hours')); 

Но не может заставить его работать. Я спрашиваю о луне?

+1

Это обсуждается в настоящее время для включения : https://wiki.php.net/rfc/instance-method-call – Gordon

ответ

0

Это ограничение PHP (я все равно вижу его как таковое), что вы должны вызывать методы для переменной. Другими словами, то, что вы пытаетесь сделать, невозможно.

+0

Однако это возможно с PHP 5.4 :) – mfonda

+0

Действительно? В заключение! Я всегда пропустил возможность сделать это на PHP :). – Corbin

+2

Да, см. Http://www.php.net/archive/2011.php#id2011-11-11-1 –

2

В данном конкретном случае, вы можете использовать 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 экземпляра.

+0

Спасибо. Не правильный ответ (php не поддерживает цепочку), но я собираюсь использовать это. – gremo

0

Согласно PHP, похоже, что вы можете вызвать static() статически, но я попробовал, и он не будет работать. Похоже, что 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'); 

Лучше реализация будет делать изменения() статические с двумя аргументами, один для даты, и один для регулировки времени, что-то вроде:

public static function modify($timeAdjust, $time = time()) 
+0

Все методы в руководстве перечислены как «ClassName :: methodName». Это не подразумевает статический метод. Статические методы имеют ключевое слово 'static' в сигнатуре метода, ср. http://php.net/manual/en/datetime.createfromformat.php – Gordon

+0

Поняв, что это было соглашение об именах, стоило сделать снимок. –

Смежные вопросы