PhP конструктор и создание цепочек

недавно я проверил пакет SwiftMailer и обнаружил эту проблему, которую не могу объяснить:

// #1
$message = new Swift_Message($subject)->setFrom($f)->setTo($t)->setBody($body);

// #2
$message = new Swift_Message($subject);
$message->setFrom($f)->setTo($t)->setBody($body);

// #3
$message = new Swift_Message($subject);
$message->setFrom($f);
$message->setTo($t);
$message->setBody($body);

Вариант № 1 взят из документации SwiftMailer и не работает, он выдает «неожиданную»>> ошибку анализа. Проблема была легко решена, варианты № 2 и № 3 работают отлично.

Я думал, что объединение методов является широко используемой техникой в ​​PHP, и я также думал, что # 1 был совершенно допустимым. Почему это не работает, как ожидалось?

Мой PHP V7.1.1

Спасибо, Армин.

0

Решение

Пример номер один не написан как таковой в документах, ни одна из цепочек методов примеров создания класса, как это никогда не было действительным PHP.

Вместо этого документация написана так:

// Create the message
$message = (new Swift_Message())

// Give the message a subject
->setSubject('Your subject')

// Set the From address with an associative array
->setFrom(['[email protected]' => 'John Doe'])

// Set the To addresses with an associative array (setTo/setCc/setBcc)
->setTo(['[email protected]', '[email protected]' => 'A name'])

// Give it a body
->setBody('Here is the message itself')

// And optionally an alternative body
->addPart('<q>Here is the message itself</q>', 'text/html')

// Optionally add any attachments
->attach(Swift_Attachment::fromPath('my-document.pdf'));

Обратите внимание, что экземпляр класса создается в квадратных скобках. Это позволяет создавать цепочки методов непосредственно из конструктора.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]