使用__construct的静态方法

时间:2016-10-09 09:33:34

标签: php class oop constructor static-methods

我需要使用带有__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();

我的问题:

  1. 我上课的方式有什么不对吗?
  2. 以上代码是否会导致性能问题?
  3. 有没有更好的方法?
  4. 感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

作为一种方法,这种方法很好,但要更加SOLID,我会在Client函数init()中传递init(Client $client),而不是在课堂上实例化它。这样做$settings,最好作为参数传递或保留在某些private变量中,而不是在初始化程序中进行硬编码。

指的是 D L 字母,Dependency Inversion PrincipleLiskov Substitution Principle

没有性能问题,只有架构方法。但对于我来说,我没有看到任何先决条件来避免构造函数并使用$api = new API($client, $settings);而不是静态调用。

构造函数(或初始化程序)签名看起来像

public function __construct(Client $client, array $settings);