在PHP中如何将对象名称作为字符串获取?

3

所以我得到了这个源代码

//get activated bundles
$bundle_list = new AutoRouter('dev',true);
$bundle_list = $bundle_list->getActivatedBundles(); 

for($a =0; $a < sizeof($bundle_list); $a++)
{
    var_dump($bundle_list[$a]);
}

转储返回多个类似这样的对象。
object(Symfony\Bundle\FrameworkBundle\FrameworkBundle)[38]
  protected 'name' => null
  protected 'extension' => null
  protected 'path' => null
  protected 'container' => null

object(Symfony\Bundle\SecurityBundle\SecurityBundle)[41]
  protected 'name' => null
  protected 'extension' => null
  protected 'path' => null
  protected 'container' => null

object(Symfony\Bundle\TwigBundle\TwigBundle)[40]
  protected 'name' => null
  protected 'extension' => null
  protected 'path' => null
  protected 'container' => null

我需要提取对象名称作为字符串,就像这样:
(string) "Symfony\Bundle\FrameworkBundle\FrameworkBundle"
(string) "Symfony\Bundle\SecurityBundle\SecurityBundle"
(string) "Symfony\Bundle\TwigBundle\TwigBundle"

类似于

for($a =0; $a < sizeof($bundle_list); $a++)
{
    var_dump((string) $bundle_list[$a]);
}

5
你尝试过使用 get_class() 吗?参考文档:http://php.net/manual/zh/function.get-class.php - undefined
2
哇,谢谢!从来没听说过这个函数,如果你愿意的话,把它作为答案发布出来吧。 - undefined
2个回答

6
你有几种方式在php中打印类名:
  1. get_class:返回对象的类名。如果该函数在非对象上调用,则会出现警告。

  2. ClassName::class:自PHP 5.5以来,我们可以访问一个类的完全限定名称。

希望这能帮到你。

0
这是一个不同的话题,但关键词是相同的。
function aObjName( $v , $get_class_var_name = false) {
    $trace = debug_backtrace();
    $vLine = file( __FILE__ );
    $fLine = $vLine[ $trace[0]['line'] - 1 ];
    $pattern = '/aObjName\(\$(.*?)->(.*?)\)/';
    preg_match($pattern, $fLine, $matches);
    if($get_class_var_name == false){
        if(!empty($matches[2])){
            return $matches[2];
        }
    } else {
        if(!empty($matches[1])){
            return $matches[1];
        }
    }
}

尝试以下方法:
$model->objname = "objvalue";
echo aObjName($model->objname); // echo "objname"
echo aObjName($model->objname, true); // echo "model"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接