键入提示和静态方法

时间:2013-06-13 12:29:16

标签: php class oop static-methods

当我运行此代码时

class Kernel
{
    private $settings = array();

    public function handle(Settings $conf)
    {
        $this->settings = $conf;
        return $this;
    }


    public function run()
    {
        var_dump($this->settings);
    }
}


class Settings
{
    public static function appConfig()
    {
        return array(
            'database' => array(
                'hostname' => 'localhost',
                'username' => 'root',
                'password' => 'test',
                'database' => 'testdb'
            )
        );
    }
}

$kernel = new Kernel;
$kernel->handle(Settings::appConfig())->run();

我收到错误

Catchable fatal error: Argument 1 passed to Kernel::handle() must be an instance of Settings, array given, called in....

这是否意味着类型提示仅适用于实例但不适用于静态方法?如果现在如何实现静态方法的类型提示?

3 个答案:

答案 0 :(得分:0)

嗯,错误文字解释了它。 你在这里传递数组:

$kernel->handle(Settings::appConfig())->run();

因为您的Settings::appConfig()方法返回一个数组。 你必须在那里传递一个实例。

答案 1 :(得分:0)

$ conf需要是Settings对象的一个​​实例才能防止错误。

handle方法类提示意味着只接受Settings类的对象实例。如果要使用带有handle方法的数组,则需要进行此更改。

public function handle(Settings $conf)

public function handle(array $conf)

答案 2 :(得分:0)

这样可行:

public function handle(array $conf)
{
    $this->settings = $conf;
    return $this;
}