我創建了一個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();
...
}
這些都不是理想的。我也考慮過製作一個靜態方法,它將包裝構造函數和連接,但構造函數必須是私有的,而且我也讀過靜態方法是不受歡迎的(主要是爲了單元測試)。
查找'singleton'方法。它們僅用於此目的,即「一次調用」方法。 – 2011-02-23 15:21:40
@Marc'singleton pattern'將會是正確的術語..;)即使+1 :) – 2011-02-23 15:24:42
我寫的連接方法是單例方法。我不想使用它。 – 2011-02-23 15:27:46