我需要使用带有__construct()
方法的静态方法来实例化Client
对象,但据我所知,由于对象未实例化,因此无法使用__construct()
使用静态方法时。
我以为我可以使用init方法。
class API
{
static $client;
public static function init()
{
$settings = [
'username' => 'user1',
];
self::$client = new Client($settings);
}
public static function foo( )
{
self::$client->action('Foo text');
}
}
API::init();
然后我可以在其他地方加载上面的类并执行以下操作。
API::foo();
我的问题:
感谢任何帮助。
答案 0 :(得分:3)
作为一种方法,这种方法很好,但要更加SOLID,我会在Client
函数init()
中传递init(Client $client)
,而不是在课堂上实例化它。这样做$settings
,最好作为参数传递或保留在某些private
变量中,而不是在初始化程序中进行硬编码。
指的是 D 和 L 字母,Dependency Inversion Principle和Liskov Substitution Principle
没有性能问题,只有架构方法。但对于我来说,我没有看到任何先决条件来避免构造函数并使用$api = new API($client, $settings);
而不是静态调用。
构造函数(或初始化程序)签名看起来像
public function __construct(Client $client, array $settings);