できるだけ簡単な例を挙げましょう。
Facebook/Twitter でサイトにログインできる機能が必要だとします。
# here's your interface/abstract class
interface Auth_Adapter {
public function auth();
}
# now your Facebook
class Auth_Adapter_Facebook implements Auth_Adapter {
public function login() {
# include facebook-sdk and auth
}
}
# Twitter
class Auth_Adapter_Twitter implements Auth_Adapter {
public function login() {
# include twitter-oauth and auth
}
}
誰かがFacebook/Twitterのことを使おうとすると想像してみてください。彼らは単に電話をかけることができます
$adapter = new Auth_Adapter_Facebook;
$adapter->login();
$adapter = new Auth_Adapter_Twitter;
$adapter->login();
ご覧のとおり、両方のアダプターが同じlogin
インターフェースを使用しています。将来、「Pinterest」ログインを含める必要がある場合はどうなりますか? 同じインターフェイスを実装している限り、コードは機能します。
編集:その他の説明
使わなきゃいけない理由はここにあるinterface or abstract
# I use `type-hinting` here. So I can ensure that only object that implements `Auth_Adapter` will allow. Without this implementation someone might pass some other object that doesn't have `login` method in. But in our case we don't have to worry about that.
public function perform_login(Auth_Adapter $adapter) {
$adapter->login();
}