Php 强制执行对象所需的方法调用
我创建了一个ssh2包装器。我已经读到构造函数不应该失败,因此ssh2连接不是在包装器中完成的,而是通过方法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
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连接。我可以把它变成一个工厂,但正如我在帖子中所说的,如果我能帮上忙的话,我不想使用静态方法。它们正是为了这个目的而设计的,“一次调用”方法。@Marcsingleton模式将是正确的术语。)尽管+1:)我编写的connect方法是一个单例方法。我不想用它。@david.wosnitza我不想让它成为单身汉。那么,我不能同时拥有两个不同的ssh2连接。我可以把它变成一个工厂,但正如我在帖子中所说的,如果我能帮上忙的话,我不想使用静态方法。