ホームページ >バックエンド開発 >PHPチュートリアル >Login::handleLogin() を呼び出す方法はわかりにくいです。
interface Observable{ function attach(Observer $observer); function detach(Observer $observer); function notify();}// ...login类class Login implements Observable{ private $observers; private $status = array(); const LOGIN_USER_UNKNOWN = 1; const LOGIN_WRONG_PASS = 2; const LOGIN_ACCESS = 3; function __construct(){ $this->observers = array(); } function attach(Observer $observer){ $this->observers[] = $observer; } function detach(Observer $observer){ $newobservers[] = array(); foreach ($this->observers as $obs){ if ( ($obs !== $observer)){ $newservers[] = $obs; } } $this->observers = $newobservers; } function notify(){ foreach ($this->observers as $obs){ $obs->update($this); } } private function setStatus($status, $user, $ip){ $this->status = array($status, $user, $ip); } function getStatus(){ return $this->status; } function handleLogin($user, $pass, $ip){ switch (rand(1,3)){ case 1: $this->setStatus(self::LOGIN_ACCESS, $user, $ip); $ret = true; break; case 2: $this->setStatus(self::LOGIN_WRONG_PASS, $user, $ip); $ret = false; break; case 3: $this->setStatus(self::LOGIN_USER_UNKNOWN, $user, $ip); $ret = false; break; } $this->notify(); return $ret; }}interface Observer{ function update(Observable $observable);}/* class SecurityMonitor implements Observer{ function update(Observable $observable){ // print_r($Observable);exit; $status = $observable->getStatus(); if ($status[0] == Login::LOGIN_WRONG_PASS){ // 发送邮件给系统管理员 print __CLASS__ . ":	$status[1] sending mail to sysadmin<br/>"; } }}$login = new Login();$login->attach(new SecurityMonitor());$login->handleLogin('root', 'root', '127.0.0.1');*/abstract class LoginObserver implements Observer{ private $login; function __construct(Login $login){ $this->login = $login; $login->attach($this); } function update(Observable $observable){ if ($observable === $this->login){ $this->doUpdate($observable); } } abstract function doUpdate(Login $login);}class SecurityMonitor extends LoginObserver{ function doUpdate(Login $login){ $status = $login->getStatus(); if ($status[0] == Login::LOGIN_WRONG_PASS){ // 发送邮件给系统管理员 print __CLASS__ . ":	sending mail to sysadmin<br/>"; } }}class GeneralLogger extends LoginObserver{ function doUpdate(Login $login){ $status = $login->getStatus(); // 记录登陆数据到日志 print __CLASS__ . ":	add login data to log<br/>"; }}class PartnershipTool extends LoginObserver{ function doUpdate(Login $login){ $status = $login->getStatus(); // 检查IP地址 // 如果匹配列表,则设置cookie print __CLASS__ . ":	set cookie if IP matches a list<br/>"; }}$login = new Login();new SecurityMonitor($login);new GeneralLogger($login);new PartnershipTool($login);
80 から 82 にコメントアウトしたコードではありませんか呼び出しメソッド?
ただし、handleLogin は実際には内部的にランダムに動作します。何をしようとしているのかわかりません
80行目から82行目までをコメントアウトしたコードが呼び出しメソッドではないでしょうか?
ただし、handleLogin は実際には内部的にランダムに動作します。何がしたいのか分かりません