이벤트 소개
이벤트를 사용하면 특정 시점에 미리 설정된 코드 조각이 실행되도록 할 수 있습니다. 이벤트는 코드를 분리하는 방법일 뿐만 아니라 비즈니스 프로세스를 설계하기 위한 패턴이기도 합니다. 최신 소프트웨어에서는 이벤트가 어디에나 있습니다. 예를 들어, 귀하가 Weibo를 게시하면 이벤트가 발생하여 귀하를 팔로우하는 사람들이 귀하의 새 콘텐츠를 보게 됩니다. 이벤트에는 다음과 같은 여러 요소가 있습니다.
이것은 어떤 종류의 이벤트인가요? 소프트웨어 시스템에는 새로운 웨이보를 게시하는 것도 이벤트이고, 웨이보를 삭제하는 것도 이벤트입니다.
이벤트를 일으킨 사람은 누구인가요? 귀하가 Weibo에 게시하는 내용이 귀하가 실행하는 이벤트입니다.
이 이벤트를 모니터링하는 책임은 누구에게 있습니까? 아니면 이런 일이 일어났는지 누가 알겠습니까? 사용자 등록을 처리하는 서버의 모듈은 귀하의 새로운 Weibo 이벤트를 확실히 수신하지 않습니다.
사고 처리 방법은 무엇인가요? 웨이보를 새로 발행하는 경우, 자신을 팔로우하는 다른 사용자들에게 알리기 위한 것입니다.
이벤트 관련 데이터는 무엇인가요? 새로운 웨이보 이벤트를 게시하려면 포함된 데이터에 적어도 새로운 웨이보의 내용, 시간 등이 포함되어야 합니다.
사례 소개: 도망갈 고양이가 있습니다. 마우스를 호출하자마자
이 예제를 구현하기 위해 frontend 폴더의 event 폴더에
event 폴더를 만듭니다. event 폴더에는 2개의 클래스 파일, 하나는 Cat이 있습니다. 클래스와 하나의
클래스
<?php namespace frontend\event; /** * 猫类 * Class: \frontend\event\Cat * * 为了让猫具有事件能力 * 所以要继承 \yii\base\Component * >>> \yii\base\Component 对 \yii\base\Event 的 on 方法进行重写 * >>> \yii\base\Event 适合类级绑定 * >>> \yii\base\Component 适合对象级绑定 */ class Cat extends \yii\base\Component { /** * 猫发出叫声 */ public function shout() { echo '猫:miao miao miao <br />'; // 猫叫了之后 触发猫的 miao 事件 $this->trigger('miao'); } }
Mouse.php
<?php namespace frontend\event; /** * 老鼠类 * Class: \frontend\event\Mouse */ class Mouse { public function run() { echo '老鼠:有猫来了,赶紧跑啊~~<br />'; } }
EventController.php
<?php namespace frontend\controllers; use frontend\event\Cat; use frontend\event\Mouse; /** * Class: \frontend\controllers\Event */ class EventController extends \yii\web\Controller { public function actionTest() { $cat = new Cat(); $mouse = new Mouse(); // 需事先给猫绑定 miao 事件才可以触发此事件 // 猫一叫,就触发老鼠的 run 方法 $cat->on('miao', [$mouse, 'run']); // 猫发出叫声 $cat->shout(); } }
를 입력하고
猫:miao miao miao 老鼠:有猫来了,赶紧跑啊~~
를 호출하여 고양이의 외침 방법, 먀오족 이벤트가 발생하고 쥐가 도망갑니다
갑자기 이 사건에 개가 가담하는데, 고양이가 짖기만 하면 개가 고양이에게로 가겠죠
개 멤버 추가 Dog.php
<?php namespace frontend\event; /** * Class \frontend\event\Dog */ class Dog extends \yii\base\Component { /** * 找猫 */ public function findCat() { echo '狗:wang wang wang, 猫在哪里??'; } }
개 추가 고양이 찾기 이벤트
... // 需事先给猫绑定 miao 事件才可以触发此事件 // 猫一叫,就触发老鼠的 run 方法 $cat->on('miao', [$mouse, 'run']); $cat->on('miao', [$dog, 'findCat']); // 添加狗找猫事件 // 让猫发出叫声 $cat->shout(); ...
Get
猫:miao miao miao 老鼠:有猫来了,赶紧跑啊~~ 狗:wang wang wang, 猫在哪里??
frontend/controllers/EventController.php를 수정
use frontend\event\Cat; use frontend\event\Mouse; use frontend\event\Dog; ... public function actionTest() { $cat = new Cat(); $mouse = new Mouse(); $dog = new Dog(); // 需事先给猫绑定 miao 事件才可以触发此事件 // 猫一叫,就触发老鼠的 run 方法 $cat->on('miao', [$mouse, 'run']); $cat->on('miao', [$dog, 'findCat']); // 并非直接删除 $cat->on('miao', [$dog, 'findCat']); // 而是通过 off 解除绑定 $cat->off('miao', [$dog, 'findCat']); // 让猫发出叫声 $cat->shout(); } ...
클래스 레벨 바인딩하지만 문제가 있습니다. 위 이벤트는
$cat이 할당한 객체에 대해 add
frontend/controllers/EventController.php의 actionTest 메소드 끝에 있습니다. 미아오 이벤트는 트리거되지 않습니다public function actionTest()
{
...
// 让猫发出叫声
$cat->shout(); // 会触发 miao 事件
(new Cat())->shout(); // 不会触发 miao 事件
}
이벤트 바인딩은 $cat 객체를 통해 수행됩니다
마우스가 고양이 소리만 나면 도망가나요? ? 이를 위해서는
이벤트 바인딩을 사용해야 합니다.
클래스 레벨 이벤트 바인딩을 위해서는 yiibaseEvent 클래스를 사용해야 합니다.
modify frontend/controllers/EventController.php
use frontend\event\Cat; use frontend\event\Mouse; use yii\base\Event; ... public function actionTest() { $cat = new Cat(); $mouse = new Mouse(); // 类级别的事件绑定 // 只要猫发出声音,不管是什么猫,都会触发老鼠的 run 方法 Event::on(Cat::className() ,'miao', [$mouse, 'run']); // 让猫发出叫声 $cat->shout(); // 会触发 miao 事件 (new Cat())->shout(); // 会触发 miao 事件 }
猫:miao miao miao 老鼠:有猫来了,赶紧跑啊~~ 猫:miao miao miao 老鼠:有猫来了,赶紧跑啊~~
를 가져옵니다.
위 내용은 Yii2의 EVENT 이벤트 예시에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!