PHPのクラスで、メソッド呼び出しに前処理を挟む
Pythonだとデコレータとかで簡単に実装できるが、PHPだとなかなか出てこなかったので。
前処理を挟みたいメソッドをprivateにして__callを使えばいいみたいですね。
テラテイルにも同様の回答があるのですが、コードが全く一緒で(むしろコードと出力結果が違う)日付的にstackoverflowの方が先だし、出展とか書かなくて大丈夫なのかな?質問者のコードのクラス名がFooなあたり。。。
一応自分でも色々いじったので、コード掲載。
class ClassWithPreprocessingMethod { // privateにして外部から呼び出せなくしておくのがミソ private function preprocesing($args = []){ echo "前処理"; if(count($args) < 1){ echo "失敗..."."\n"; return 1; } echo "成功!"."\n"; return 0; } private function method1($args = []){ echo "テスト1"."\n"; var_dump($args); return 0; } private function method2($args = []){ echo "テスト2"."\n"; var_dump($args); return 0; } public function __call($method, $arguments) { if(method_exists($this, $method)) { // 前処理結果による処理 if($this->preprocesing($arguments)){ return 1; } // ここでメソッドごとの分岐など return call_user_func_array(array($this, $method), $arguments); } } } $cwpm = new ClassWithPreprocessingMethod; $cwpm->method1(); $cwpm->method2(['preprocesing' => 'method']);
出力結果
前処理失敗... 前処理成功! テスト2 array(1) { ["preprocesing"]=> string(6) "method" }
いい感じですね。