-1

このコードを実行すると

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....

タイプヒントはインスタンスに対してのみ機能し、静的メソッドに対しては機能しないということですか? 静的メソッドの型ヒントを実現する方法は?

4

3 に答える 3

0

まあ、エラーテキストはそれを説明しています。ここで配列を渡しています:

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

Settings::appConfig()メソッドが配列を返すためです。そこにインスタンスを渡す必要があります。

于 2013-06-13T12:32:52.170 に答える
0

エラーを防ぐには、$conf を設定オブジェクトのインスタンスにする必要があります。

ハンドル メソッドのクラス ヒントは、Settings クラスのオブジェクト インスタンスのみが受け入れられることを意味します。handle メソッドで配列を使用する場合は、この変更を行う必要があります。

public function handle(Settings $conf)

public function handle(array $conf)
于 2013-06-13T12:34:43.333 に答える
0

これはうまくいくでしょう:

public function handle(array $conf)
{
    $this->settings = $conf;
    return $this;
}
于 2013-06-13T12:34:51.173 に答える