如何在属性变量classname上调用静态方法?
以下是一些示例代码:
class Foo
{
var $class = 'Bar';
public function getNew() {
return $this->class::create(); // this fails
}
}
class Bar
{
public static function create() {
return new self();
}
}
$foo = new Foo();
$foo->getNew();
在这个例子中,我如何在$ class属性中指定的类上调用静态方法?
变量范围解析失败,PHP 5.6上出现解析错误:
{$this->class}::create();
($this->class)::create();
这很有效,但是很冗长:
$class = $this->class;
$class::create();
call_user_func([$this->class, 'create']);
是否有更短或更易读的方式?我使用的是PHP 5.6
答案 0 :(得分:1)
马克的评论很有见。这有效:
<?php
class Foo {
var $class = 'Bar';
public function getNew() {
$className = $this->class;
return $className::create();
}
}
class Bar {
public static function create() {
return new self();
}
public function speak() {
echo 'It lives';
}
}
$foo = new Foo();
$bar = $foo->getNew();
$bar->speak();
然而,不要害怕它是冗长的,因为它非常清楚。 PHP还有许多其他冗长的结构需要担心。