人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【詳しい内容をコメント欄に追記しています。そちらもご覧になってから回答をお願いします。】

PHP(PHP5)の質問です。
あるクラスのメソッドから、別のクラスのメソッドを呼び出しています。
呼び出された側のメソッド内で、「呼び出し元のクラス名」を取得することは可能でしょうか?

インスタンスオブジェクトを渡せばgetClass()でクラス名が取得できますが、
オブジェクトを渡すことなく「呼び出し元のクラス名」を取得したいと思います。
現行のPHPではできないようにも思いますが、もし可能であればその方法を教えてください。

●質問者: wizemperor
●カテゴリ:ウェブ制作
✍キーワード:PHP インスタンス オブジェクト クラス コメント欄
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● kent013
●100ポイント ベストアンサー

PHPの仕組みとしてはできませんが,Backtraceを使うことで可能です.

http://jp2.php.net/debug_backtrace]

<?php
class Logger{
 public static function getLocation(){
 $trace = debug_backtrace();
 $locate = "at ";
 if (isset($trace[1])){
 if(isset($trace[1]["class"])) {
 $locate .= $trace[1]["class"] . "::";
 }
 }
 if ($trace[1]["function"] != null) {
 $locate .= $trace[1]["function"] . "()";
 }
 $locate .= " in " . $trace[1]["file"] . "#" . $trace[0]["line"];
 return $locate;
 }
}

class ClassTest{
 public function test1(){
 var_dump(Logger::getLocation());
 }
 public function test2(){
 $logger = new Logger();
 var_dump($logger->getLocation());
 }
}
function functionTest(){
 var_dump(Logger::getLocation());
}

$t = new ClassTest();
$t->test1();
$t->test2();
functionTest();
?>

速度的には,どうでしょう.

この程度のサンプルスクリプトだと一瞬だと思いますが,大きな仕組みになるとtraceも大きくなるので重いかもしれません.

◎質問者からの返答

さっそくの回答、ありがとうございます。

なるほどbacktraceで可能そうですね。

今回は速度的なことは問題ないのですが、クラスの再利用時は気になる可能性はありますね。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ