【发布时间】:2011-07-02 20:19:54
【问题描述】:
我创建了一个 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();
...
}
这些似乎都不理想。
我还考虑过创建一个静态方法来包装构造函数并进行连接,但是构造函数必须是私有的,而且我还读到静态方法是不可取的(主要用于单元测试)。
【问题讨论】:
-
查找“单例”方法。它们仅用于此目的,即“调用一次”方法。
-
@Marc
singleton pattern将是正确的术语.. ;) 即使 +1 :) -
我写的connect方法是单例方法。我不想使用它。
-
@david.wosnitza 我不希望这是一个单身人士。然后,我不能同时拥有两个不同的 ssh2 连接。我可以把它改成工厂,但正如我在帖子中所说,如果我能提供帮助,我不想使用静态方法。
标签: php oop design-patterns methods