nl2br()
функция используется для создания новой строки
echo nl2br("Welcome\r\n This is my HTML document", false);
Приведенный выше пример выдаст:
Welcome
Это мой HTML-документ
Потому что события могут обрабатываться несколькими слушателями. Не существует гарантированного порядка для обработчиков событий (хотя я думаю, что они вызываются в том порядке, в котором они подписаны на самом деле).
Вместо этого для событий, которые хотят «возвращать» некоторые данные, соглашение должно иметь изменяемый Объект EventArgs, например CancelEventArgs, для свойства Cancel которого может быть установлено значение true. Преимущество этого перед возвращаемым значением состоит в том, что обработчики событий в цепочке могут просматривать свойство, чтобы узнать, не установил ли его другой обработчик. Но вы все равно можете столкнуться с ситуацией, когда побеждает тот, кто последним установил свойство.
Если бы это было возвращаемое значение, вся концепция была бы намного сложнее.
На самом деле, события могут иметь возвращаемые значения; просто, это не очень хорошая идея, так как требует более сложной обработки, когда может быть несколько слушателей ... чаще может быть устанавливаемое свойство подкласса EventArgs
.
Но вот один пример использования возвращаемых значений с событиями; это не обычно хорошая идея; только для информации:
using System;
delegate int SomeBizarreEvent(object sender); // non-standard signature
class Foo {
public event SomeBizarreEvent Bizarro;
public void TestOverall() {
SomeBizarreEvent handler = Bizarro;
if (handler != null) {
Console.WriteLine(handler(this));
}
}
public void TestIndividual() {
SomeBizarreEvent handler = Bizarro;
if (handler != null) {
foreach (SomeBizarreEvent child in handler.GetInvocationList()) {
Console.WriteLine(child(this));
}
}
}
}
class Program {
static void Main() {
Foo foo = new Foo();
foo.Bizarro += delegate { return 1; };
foo.Bizarro += delegate { return 5; };
// writes 5 (the last result wins)
foo.TestOverall();
// writes 1, 5
foo.TestIndividual();
}
}
Запуск события - это односторонний сигнал. В основном они используются для достижения слабой связи, потому что инициатор события не зависит от потребителя. Возвращаемое значение создало бы зависимость от потребителя.
Это дизайн системы событий ... Основная цель системы событий - уведомление, а не подтверждение.
Событие - это способ уведомить его слушателей (наблюдателей) о важном действии произошло. Он не разработан таким образом, чтобы не только уведомлять слушателей о том, что произошло важное действие, но и подтверждать источник события, что это именно то ???? обрабатываются ??? или иначе ... Как вы решаете, что делать ???
Если событие должно возвращать значение, где бы оно возвращалось, если с ним не связан обработчик. Что делать, если у события есть несколько обработчиков ... Тогда как решить, какое значение обработчика должно возвращаться.
Прежде всего, эти события могут возвращать значения. Хотя это не лучшая практика.
Это потому, что событие является асинхронным вызовом. Вы можете обрабатывать несколько копий одного и того же события одновременно.
Следовательно, они передают только информацию, поскольку для обработки возвращаемого типа возбудитель события должен будет синхронизироваться и ждать завершения обработчика события. Это сделает его таким же, как и любой другой вызов процедуры.