如何自定义方法行为不使用继承

编辑本页

如何自定义方法行为不使用继承

在方法调用之前或之后执行某些操作

如果你想在一个方法被调用之前或之后直接做一些事情,你可以在方法的开始或结束分别分派一个事件:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
CustomMailer/ /……公共函数发送主题消息//在方法之前分派一个事件事件BeforeSendMailEvent (主题消息);->调度程序->调度(事件“mailer.pre_send”);//从事件中获取$subject和$message,它们可能已被修改主题事件->getSubject ();消息事件->getMessage ();//真正的方法实现在这里returnValue=……;//在方法之后执行一些操作事件AfterSendMailEvent (returnValue);->调度程序->调度(事件“mailer.post_send”);返回事件->getReturnValue ();}}

在这个例子中,有两个事件被分派:

  1. mailer.pre_send,在调用方法之前,
  2. 而且mailer.post_send在调用方法之后。

每个事件都使用自定义Event类向两个事件的侦听器传递信息。例如,BeforeSendMailEvent可能是这样的:

12 34 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
/ / src /事件/ BeforeSendMailEvent.php名称空间应用程序事件使用ob娱乐下载合同EventDispatcher事件BeforeSendMailEvent扩展事件私人主题私人消息公共函数__construct主题消息->主题=主题->消息=消息;}公共函数getSubject()返回->主题;}公共函数setSubject主题->主题=主题;}公共函数getMessage()返回->消息;}公共函数setMessage消息->消息=消息;}}

AfterSendMailEvent甚至像这样:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
/ / src /事件/ AfterSendMailEvent.php名称空间应用程序事件使用ob娱乐下载合同EventDispatcher事件AfterSendMailEvent扩展事件私人returnValue公共函数__constructreturnValue->returnValue =returnValue;}公共函数getReturnValue()返回->returnValue;}公共函数setReturnValuereturnValue->returnValue =returnValue;}}

这两个事件都允许你获得一些信息(例如:getMessage ()),甚至改变这些信息(例如:setMessage ()).

现在,您可以创建一个事件订阅器来连接到这个事件。例如,你可以听mailer.post_send事件,并更改方法的返回值:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
/ / src / EventSubscriber / MailPostSendSubscriber.php名称空间应用程序EventSubscriber使用应用程序事件AfterSendMailEvent使用ob娱乐下载组件EventDispatcherEventSubscriberInterfaceMailPostSendSubscriber实现了EventSubscriberInterface公共函数onMailerPostSend(AfterSendMailEvent事件returnValue事件->getReturnValue ();//修改原始的“$returnValue”值事件->setReturnValue (returnValue);}公共静态函数getSubscribedEvents()返回“mailer.post_send”= >“onMailerPostSend”,);}}

就是这样!您的订阅者将被自动调用(或阅读更多相关内容)事件订阅者配置).

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。
ob娱乐下载Symfony 5.4支持通过私人Packagist