Php 强制执行对象所需的方法调用

Php 强制执行对象所需的方法调用,php,oop,design-patterns,methods,Php,Oop,Design Patterns,Methods,我创建了一个ssh2包装器。我已经读到构造函数不应该失败,因此ssh2连接不是在包装器中完成的,而是通过方法connect()。我的问题是:如何确保调用connect()?我也真的只需要叫一次 class uploader { private $user; private $pass; private $host; private $ssh = null; private $sftp = null; public function __construct($host, $use

我创建了一个ssh2包装器。我已经读到构造函数不应该失败,因此ssh2连接不是在包装器中完成的,而是通过方法
connect()
。我的问题是:如何确保调用
connect()
?我也真的只需要叫一次

class uploader {
   private $user; private $pass; private $host;
   private $ssh = null; private $sftp = null;
   public function __construct($host, $user, $pass) {
      $this->host = $host; $this->user = $user; $this->pass = $pass;
   }
   public function connect() {
      if ($this->ssh === null) {
         $this->ssh = ssh2_connect($this->host);
         ssh2_auth_password($this->ssh, $this->user, $this->pass);
         $this->sftp = ssh2_sftp($this->ssh);
      }
   }
}
确保调用connect()的最佳方法是什么?应用程序应该调用它吗

$ssh = new uploader('host', 'user', 'pass');
$ssh->connect();
还是在类方法中

...
public function upload($source, $dest, $filename) {
   $this->connect();
   ...
}

public function delete($file) {
   $this->connect();
   ...
}
这两个似乎都不理想


我还考虑创建一个静态方法来包装构造函数并连接,但是构造函数必须是私有的,而且我也读到过静态方法是不可取的(主要是用于单元测试)。

最简单的方法是调用connect()在构造函数中,确保使用析构函数断开连接。

最简单的方法是在构造函数中调用connect(),并确保使用析构函数断开连接

我也读过静态方法是不受欢迎的(主要是用于单元测试)

静态方法在某些方面是不可取的,但工厂方法不是其中之一。它们在那里非常合理,并且不会影响单元测试。所以,继续做一个静态工厂方法

我也读过静态方法是不受欢迎的(主要是用于单元测试)


静态方法在某些方面是不可取的,但工厂方法不是其中之一。它们在那里非常合理,并且不会影响单元测试。所以,继续做一个静态工厂方法。

查找“单例”方法。它们正是为了这个目的而设计的,“一次调用”方法。@Marc
singleton模式将是正确的术语。)尽管+1:)我编写的connect方法是一个单例方法。我不想用它。@david.wosnitza我不想让它成为单身汉。那么,我不能同时拥有两个不同的ssh2连接。我可以把它变成一个工厂,但正如我在帖子中所说的,如果我能帮上忙的话,我不想使用静态方法。它们正是为了这个目的而设计的,“一次调用”方法。@Marc
singleton模式将是正确的术语。)尽管+1:)我编写的connect方法是一个单例方法。我不想用它。@david.wosnitza我不想让它成为单身汉。那么,我不能同时拥有两个不同的ssh2连接。我可以把它变成一个工厂,但正如我在帖子中所说的,如果我能帮上忙的话,我不想使用静态方法。