I have a class that connects to Windows machines. I'm leaving it a bit more generic, so I can reuse it for other systems.
I was able to identify four "generic" methods:
- connect
- status
- error message
- run
With this, I put together a class and an interface, but my question is: In the scenario below, is it better to use an abstract class, or is an interface more than enough?
Connection class:
class Windows implements Conector
{
/**
* Armazena um apontamento externo para um recurso
*
* @access private
* @var object
*/
private static $conexao;
/**
* Armazena a(s) mensagens de erro
*
* @access private
* @var string
*/
private static $mensagemErro;
/**
* Método de conexão
*
* @param string $host
* @param string $usuario
* @param string $senha
* @param int $porta
* @param int $timeout
* @return void
*/
public static function conectar($host, $usuario = null, $senha = null, $porta = 135, $timeout = 10)
{
try
{
/**
* Método utilizado para testar conectividade com o host alvo
*
* @param string $host
* @param string $porta
* @param int $errno valor de sistema
* @param string $errstr mensagem de sistema
* @param int $timeout tempo máximo a esperar por uma tentativa de conexão via socket
*/
if (!@fsockopen($host, $porta, $errno, $errstr, $timeout))
{
throw new Exception("Erro ({$errno}): Time Out ao chamar o host <b>{$host}</b>!");
}
//...
} catch (Exception $e) {
self::$mensagemErro = $e->getMessage();
}
}
public static function status()
{
return (self::$conexao !== NULL) ? TRUE : FALSE;
}
public static function mensagemErro()
{
return self::$mensagemErro;
}
public static function executar($acao)
{
try
{
if (!self::$conexao)
{
throw new Exception("Erro: É necessário abrir uma conexão antes de tentar executar qualquer comando!");
}
// @see http://php.net/manual/en/ref.com.php
return self::$conexao->ExecQuery($query);
}
catch (Exception $e)
{
return $e->getMessage();
}
}
}
Interface:
interface Conector
{
/**
* Método de conexão para máquinas Windows
*
* @param string $host
* @param string $usuario
* @param string $senha
* @param int $porta
* @param int $timeout
* @return void
*/
public static function conectar($host, $usuario = null, $senha = null, $porta = 135, $timeout = 10);
public static function status();
public static function mensagemErro();
public static function executar($acao);
}