web-dev-qa-db-ja.com

PHP 5.4:インスタンス変数の完全修飾クラス名を取得する

PHP 5.5に静的classフィールドがあることを知っていますが、PHP 5.4に固執する必要があります。取得することは可能ですか?変数からの完全修飾クラス名?

例:

namespace My\Awesome\Namespace

class Foo {

}

そして、コードの他の場所:

public function bar() {
   $var = new \My\Awesome\Namespace\Foo();

   // maybe there's something like this??
   $fullClassName = get_qualified_classname($var);

   // outputs 'My\Awesome\Namespace\Foo'
   echo $fullClassName 
}
19
leypascua

get_class

名前空間を使用している場合、この関数は名前空間を含むクラスの名前を返すため、コードがこれをチェックしていないか注意してください。

namespace Shop; 

<?php 
class Foo 
{ 
  public function __construct() 
  { 
     echo "Foo"; 
  } 
} 

//Different file 

include('inc/Shop.class.php'); 

$test = new Shop\Foo(); 
echo get_class($test);//returns Shop\Foo 

これは here からの直接コピー貼り付けの例です

23

私はこれが古い質問であることを知っていますが、まだこれを見つけている人のために、私はこのアプローチを提案します:

namespace Foo;

class Bar
{
    public static function fqcn()
    {
        return __CLASS__;
    }
}

// Usage:
use Foo\Bar;
// ...
Bar::fqcn(); // Return a string of Foo\Bar

PHP 5.5を使用している場合は、これを簡単に実行できます。

namespace Foo;

class Bar
{}

// Usage:
use Foo\Bar;
// ...
Bar::class; // Return a string of Foo\Bar

お役に立てれば...

:: class here に関する詳細情報。

13
Nigel Greenway