• 締切済み

自作関数におけるコンストラクタとデストラクタ

お世話になります。 定義クラスにおいて、オブジェクト生成時と解放時にコールされる関数(__construct()、__destruct())は有名ですが、クラス内に定義した自作関数がコールされた時と終了(?)した時に、コールされる関数は存在するのでしょうか。 現在、自作した関数の最初と最後に、ログ書き込み用の自作関数を仕込む事で、希望した挙動を実装していますが、自作関数におけるコンストラクタ、デストラクタの様な関数があれば楽かなと、色々検索したのですが、今ひとつヒットしませんでした。 ご存じの方、情報提供頂ければ嬉しいです。

みんなの回答

回答No.1

基本機能では、存在しません。 それは、いわゆるAOP(アスペクト指向プログラミング)の1つです。 PHP AOPや、PHP アスペクト指向とかで検索すると、 フレークワークの機構としてあったりします。 そこまでするのが正直面倒な場合、マジックメソッドをオーバーロードするのが 一番手っ取り早いかもしれません。 public class Hoge {  public function __call($name, $args) {   $this->putLog($name, $args, 'start');   $result = $this->$name($args);   $this->putLog($name, $args, 'end');   return $result;  }  private function fuga() {   ~ やりたい処理 ~  }  private function putLog($name, $args, $section) {   $logValue;   if (strcmp($section, 'start') == 0) {    $logValue = $name . $args. ' ' . $section;   } else {    $logValue = $name . ' ' . $section;   }   ~ ログ書込み ~  } } 【呼出し側】 $hoge = new Hoge(); $hoge->fuga(); みたいな。 http://php.net/manual/ja/language.oop5.overloading.php#object.call 色々はしょってるしPHPをもう忘れちゃったので、調べればできると思います。

atlas112
質問者

お礼

早速のご回答・情報提供ありがとうございます。 オーバーロードまでは考えつきませんでした。 ご参考にさせて頂きます。

atlas112
質問者

補足

希望するイメージを補足させて頂きます。 class A { function 自作関数の開始でコール(){ // 処理a // 処理b } function 自作関数の処理でコール(){ // 処理c // 処理d } function test(){ // 処理1 // 処理2 } } 上記の構造で希望する処理順序は、処理a -> 処理b -> 処理1 -> 処理2 -> 処理c -> 処理d です。

関連するQ&A