有没有办法在php中获取类名,将其转换为字符串并将其存储在变量中?

时间:2017-12-17 09:50:55

标签: php oop

我有一个带有方法saveToTable($ table)的类Bar,我需要为$ table设置一个默认值,但该值必须是动态的,动态值应该是Bar扩展到的类的名称。

class Bar {

  public function saveToTable($table) {

  }

}



class Foo extends Bar {

}

$bar = new Foo;

$bar->saveToTable(); // in which case saveToTable() would have a param of 'foo' i.e. saveToTable('foo');

我目前使用的解决方案是在扩展Bar的每个类中明确指定$ table属性,并为其分配这些类的字符串值。名称,但这会使我的应用程序动态失败的目的,加上它会非常麻烦,容易出错。

3 个答案:

答案 0 :(得分:1)

你可以使用late static binding来引用扩展类

将此方法添加到Bar

 class Bar{

   public function getClassName()
   {
      return static::class;
   }
 }

现在你可以得到名字

$bar = new Foo();

$bar->getClassName(); // returns Foo

答案 1 :(得分:0)

不使用具有默认值的参数(不能动态分配) 考虑使用像这样的东西:

class Bar {

    protected $classname;

    public function __construct() {
        $this->classname = static::class;
    }

    public function saveToTable() {
        echo $this->classname;
    }
}

现在在saveTotable()里面,你的类名是字符串。

class Foo extends Bar {

}

$bar = new Foo;

$bar->saveToTable(); // will echo 'Foo'

答案 2 :(得分:0)

另一个解决方案,注意命名空间,也许你需要删除

class Bar
{
    public function saveToTable()
    {
        //Without namespace
        $table = substr(static::class, strlen(__NAMESPACE__) + 1);
        //With namespace
        $table = static::class;
    }
}

class Foo extends Bar
{
}

$bar = new Foo;
$bar->saveToTable();