当我运行此代码时
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....
这是否意味着类型提示仅适用于实例但不适用于静态方法?如果现在如何实现静态方法的类型提示?
答案 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;
}