如何在作为属性的变量类名上调用静态方法?

时间:2015-07-15 08:19:30

标签: php static-methods

如何在属性变量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

1 个答案:

答案 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还有许多其他冗长的结构需要担心。