本案例为用户的邮箱及手机号操作。
1.首先定义执行的接口
<?php
namespace App\Observer;
/**
* 实现接口的执行定义
* Interface UserSendInterface
* @package App\Observer
*/
interface UserSendInterface
{
/**
* @return mixed
*/
public function exec();
}
2.分别定义好两个类
类:EmailService
<?php
namespace App\Observer;
/**
* Class EmailService
* @package App\Observer
*/
class EmailService implements UserSendInterface
{
/**
* @return mixed|string
*/
public function exec()
{
return 'email';
}
}
类:PhoneService
<?php
namespace App\Observer;
/**
* Class PhoneService
* @package App\Observer
*/
class PhoneService implements UserSendInterface
{
/**
* @return mixed|string
*/
public function exec()
{
return 'phone';
}
}
3.添加observer
<?php
namespace App\Observer;
/**
* Class SetObserver
* @package App\Observer
*/
class SetObserver
{
/**
* @var array
*/
public $observers = [];
/**
* @param $name
* @param \App\Observer\UserSendInterface $userSend
*/
public function addObserver($name,UserSendInterface $userSend)
{
$this->observers[$name] = $userSend ;
}
/**
* @param $name
* @return mixed
*/
public function getObserver($name)
{
return $this->observers[$name];
}
/**
* @param $name
*/
public function removeObserver($name)
{
unset($this->observers[$name]);
}
/**
* @return array
*/
public function notify()
{
$data = [];
foreach ($this->observers as $observer) {
$data[] = $observer->exec();
}
return $data;
}
}
4.绑定一下
<?php
namespace App\Providers;
use App\Observer\EmailService;
use App\Observer\PhoneService;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
//
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
$this->app->bind('PhoneService', PhoneService::class);
$this->app->bind('EmailService', EmailService::class);
}
}
5.test 执行
<?php
namespace App\Http\Controllers;
use App\Observer\SetObserver;
class TestController extends Controller
{
public $observer;
public function __construct(SetObserver $observer)
{
$this->observer = $observer;
}
/**
* @return mixed
*/
public function test()
{
$this->observer->addObserver('phone', app('PhoneService'));
$this->observer->addObserver('email', app('EmailService'));
list($phone, $email) = $this->observer->notify();
return ['phone' => $phone, 'email' => $email];
}
}
以上代码很简单,代码没做验证,这里仅作基础演示。