前回「適当にinterface作ってそっちで吸収してくれよと非常に思う」とか言ったので、とりあえず一部だけやってみた。
インターフェイス
本体
使い方
使い方はITwitterOAuthWrapperの解説通りにメソッドを呼び出すだけ。
あとは必要に応じてインターフェイスとその実体を追加していくだけです。
こういう作りにして何がうれしいかというと、仕様変更に強くなる点。
もしツイートするURLが'statuses/update'から他に変わったとします。
元々の作りのように、呼び出し側にこのURLが書いてあった場合、ツイートしているところを全て書き直さなければなりません。
しかしTwitterOAuthWrapperであれば、tweetメソッド一箇所書き換えるだけでおわりです。
まあちょっと適当な作りなので、正直あまり気に入ってないです。
このまま実装を続けると、TwitterOAuthWrapperには延々ほぼ同じ呼び出し方のメソッドが並ぶ羽目になります。
なのでURLやリクエストメソッドなどは設定に持っておいて__callで一括処理とかしたかったわけですよ。
しかしinterfaceのメソッドは必ず実装が必要で、__callで受け取れないという。ぐぬぬ(当たり前)
そこでITwitterOAuthWrapperをimplementsしないというナイスな解決手段を思いついたのだがどうだろう。
インターフェイス
<?php interface ITwitterOAuthWrapper{ /** * トークンが有効か+ユーザ情報取得 * @return stdClass */ public function verifyCredentials(); /** * ツイートする * @param String 発言内容 * @param array オプション * @return stdClass */ public function tweet($text, $options = array()); /** * ユーザ名でユーザ情報を取得 * @param String ユーザ名 * @param array オプション * @return stdClass */ public function getUserInfoFromName($userName, $options = array()); /** * ユーザIDでユーザ情報を取得 * @param String ユーザID * @param array オプション * @return stdClass */ public function getUserInfoFromId($userId, $options = array()); /* 以下略 */ }
本体
<?php class TwitterOAuthWrapper extends TwitterOAuth implements ITwitterOAuthWrapper{ public function verifyCredentials(){ return $this->get('account/verify_credentials'); } public function tweet($text, $options = array()){ return $this->post('statuses/update', array_merge($options, ['status'=>$text] )); } public function getUserInfoFromName($userName, $options = array()){ return $this->get('users/show', array_merge($options, ['screen_name'=>$userName] )); } public function getUserInfoFromId($userId, $options = array()){ return $this->get('users/show', array_merge($options, ['user_id'=>$userId] )); } }
使い方
<?php // TwitterOAuthWrapper require_once('twitteroauth/TwitterOAuthWrapper.php'); $TwitterOAuth = new TwitterOAuthWrapper('コンシューマキー', 'コンシューマシークレット', 'アクセストークン', 'アクセスシークレット'); // トークンが有効か+ユーザ情報取得 $user = $TwitterOAuth->verifyCredentials(); // つぶやく $status = $TwitterOAuth->tweet('ツイート内容'); // ユーザ情報を取得 $userinfo = $TwitterOAuth->getUserInfoFromName('ユーザ名'); $userinfo = $TwitterOAuth->getUserInfoFromId('ユーザID'); // 元々の使い方も一応可能 $status = $TwitterOAuth->post('statuses/update', ['status' =>'ツイート内容']);
使い方はITwitterOAuthWrapperの解説通りにメソッドを呼び出すだけ。
あとは必要に応じてインターフェイスとその実体を追加していくだけです。
こういう作りにして何がうれしいかというと、仕様変更に強くなる点。
もしツイートするURLが'statuses/update'から他に変わったとします。
元々の作りのように、呼び出し側にこのURLが書いてあった場合、ツイートしているところを全て書き直さなければなりません。
しかしTwitterOAuthWrapperであれば、tweetメソッド一箇所書き換えるだけでおわりです。
まあちょっと適当な作りなので、正直あまり気に入ってないです。
このまま実装を続けると、TwitterOAuthWrapperには延々ほぼ同じ呼び出し方のメソッドが並ぶ羽目になります。
なのでURLやリクエストメソッドなどは設定に持っておいて__callで一括処理とかしたかったわけですよ。
しかしinterfaceのメソッドは必ず実装が必要で、__callで受け取れないという。ぐぬぬ(当たり前)
そこでITwitterOAuthWrapperをimplementsしないというナイスな解決手段を思いついたのだがどうだろう。
PR