Обязательный вызов метода для объекта - PullRequest
1 голос
/ 23 февраля 2011

Я создал оболочку 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();
   ...
}

Ни один из них не кажется идеальным.

Я также думал о создании статического методаэто обернет конструктор и соединит, но тогда конструктор должен быть закрытым, и я также прочитал, что статические методы нежелательны (в основном только для модульного тестирования).

Ответы [ 2 ]

1 голос
/ 23 февраля 2011

Я также читал, что статические методы нежелательны (в основном только для модульного тестирования).

Статические методы в некоторых случаях нежелательны, но фабричные методы не входят в их число. Они имеют смысл и не влияют на юнит-тестирование. Итак, сделайте статический фабричный метод.

0 голосов
/ 23 февраля 2011

Самый простой способ - вызвать connect () в вашем конструкторе и обязательно создать деструктор для отключения вашего соединения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...