Você está aqui: PHP ::: Design Patterns (Padrões de Projeto) ::: Singleton Pattern

Como usar o padrão de projeto Singleton em suas aplicações PHP

Quantidade de visualizações: 7241 vezes
O padrão de projeto Singleton (ou Singleton Pattern) é um dos padrões de projeto mais conhecidos e implementados extensivamente nas linguagens Java e C#. Como o PHP, a partir de sua versão 5, suporta praticamente todos os recursos da programação orientada a objetos, este padrão pode ser implementado também nesta linguagem sem muitas dificuldades.

Uma das situações nas quais usamos o padrão Singleton é quando queremos que somente uma instância de uma determinada classe seja criada e que esta esteja disponível para todas as demais classes do sistema. Um exemplo disso é uma classe responsável por registrar logs do sistema, uma classe responsável por obter conexões com o banco de dados, ou ainda uma classe que concentra dados de configuração da aplicação.

Assim, a chave do padrão Singleton é um método estático, geralmente chamado de getInstance(), que retorna uma nova instância da classe se esta ainda não foi instanciada. Se a classe já tiver sido instanciada, o método getInstance() retorna a instância já existente.

Vamos ver um exemplo deste padrão em PHP. Observe o código a seguir:

<?
  // Uma classe Singleton responsável por gravar 
  // logs no sistema
  class Logger{
    // variável estática e privada que guarda a instância
    // atual da classe
    private static $instancia = NULL;    

    // Método estático que retorna uma instância já existente, ou
    // cria uma nova instância
    public static function getInstance(){
      if(self::$instancia == NULL){
         self::$instancia = new Logger();
      }
      return self::$instancia;
    }

    // Construtor privado para evitar que instâncias sejam
    // criadas usando new
    private function __construct(){
      // não precisamos fazer nada aqui
    }

    // Método clone() também privado para evitar a criação
    // de clones desta classe
    private function __clone(){
      // não precisamos fazer nada aqui
    }

    public function registrarLog($dados){
      echo "Vou registrar o log: " . $dados;
    }
  }

  // vamos registrar um novo log usando a classe Singleton
  Logger::getInstance()->registrarLog("Novo usuário cadastrado.");
?>

Ao executar este código teremos o seguinte resultado:

Vou registrar o log: Novo usuário cadastrado.


PHP ::: Fundamentos da Linguagem ::: Tipos de Dados

Apostila PHP - Como usar o tipo de dados string do PHP

Quantidade de visualizações: 9458 vezes
Strings são cadeias de caracteres, ou seja, palavras, frases e trechos de texto são considerados strings e usadas em praticamente todos os tipos de aplicações.

Em PHP, literais strings podem ser criados usandos aspas simples ou duplas. Veja:

$nome = 'Osmar J. Silva';  
$cidade = "Goiânia";

Variáveis são expandidas (avaliadas) dentro de aspas duplas. Dentro de aspas simples isso não acontece:

$nome = "Osmar J. Silva";
echo "Olá, $nome\n";
echo 'Olá, $nome';

O resultado da execução deste código será:

Olá, Osmar J. Silva
Olá, $nome

Aspas duplas suportam uma boa quantidade de strings de escape, como listado abaixo:

Símbolo        Significado         
------------------------------------------------------
  \"         Aspas duplas 
  \n         Nova linha (Newline) 
  \r         Retorno de linha (Carriege return)  
  \t         Tab (tabulação)
  \\         Barra invertida (Backslash)
  \$         Símbolo de Dollar
  \{         Chave esquerda
  \}         Chave direita 
  \[         Colchete esquerdo
  \]         Colchete direito  
\0 à \777    Caractere ASCII representado por um valor 
             octal
\x0 à \xFF   Caractere ASCII representado por um valor
             hexadecimal


Strings dentro de aspas simples reconhecem \\ para obter uma barra invertida e \' para obter uma aspas simples:

$caminho = 'C:\\WINDOWS\\SYSTEM';
$frase = 'Shes\'s here!';

Para testar se duas strings são iguais, o operador de comparação == pode ser usado:

if($a == $b){ 
  echo "As duas strings são iguais." 
}

Se quisermos saber se uma determinada variável é do tipo string, podemos usar a função is_string(). Veja:

<?
  $nome = 'Osmar J. Silva';  
  
  if(is_string($nome)){
    echo 'A variável $nome é do tipo string';
  }
?>



PHP ::: Dicas & Truques ::: Data e Hora

Datas e horas em PHP - Como obter o timestamp do primeiro dia do mês e ano informados

Quantidade de visualizações: 8445 vezes
Nesta dica eu mostrarei como é possível obter o timestamp do primeiro dia de um determinado mês e ano.

O "Unix timestamp" contém o número de segundos entre a "Unix Epoch" (1 de janeiro de 1970, às 00:00:00 GMT) e o tempo decorrido desde então.

Veja o código PHP completo para o exemplo:

<html>
<head>
<title>Estudando PHP</title>
</head>
<body>
 
<?php
  $mes = 1; // 1 = janeiro;
  $ano = 2021;
  $primeiro_dia = mktime(0, 0, 0, $mes, 1, $ano);
  echo "O timestamp do primeiro dia do mês e ano 
    informado é: " . $primeiro_dia;
?>
 
</body>
</html>

Ao executar este código nós teremos o seguinte resultado

O timestamp do primeiro dia do mês e ano informado é: 1609455600


PHP ::: Dicas & Truques ::: Strings e Caracteres

Manipulação de texto em PHP - Como acessar e modificar os caracteres individuais de uma string

Quantidade de visualizações: 8489 vezes
Os caracteres de uma string em PHP, ou seja, uma palavra, frase ou texto, podem ser acessados individualmente usando índices, igual fazemos com os vetores (o índice começando sempre em zero). Dessa forma, podemos tanto obter um determinado caractere quanto acessá-lo e modificá-lo.

Veja um código PHP completo demonstrando o exemplo:

<html>
<head>
<title>Estudando PHP</title>
</head>
<body>
 
<?php
  $nome = "Carlos de Jesus";
  echo "Original: " . $nome . "<br>";
  echo "Vou alterar o 11º caractere.<br>";
  $nome[10] = "M";
  echo "Modificado: " . $nome;
?>

</body>
</html>

Ao executar este código PHP nós teremos o seguinte resultado:

Original: Carlos de Jesus
Vou alterar o 11º caractere.
Modificado: Carlos de Mesus


PHP ::: Boletos Bancários, Arquivos de Remessa e Retornos do Banco ::: Caixa Econômica Federal - Banco 104

Boleto Bancário PHP - Como calcular o dígito verificador da conta corrente - Módulo 11 - Boleto Caixa Econômica CNAB240

Quantidade de visualizações: 374 vezes
Nesta dica mostrarei, passo-a-passo, como calcular o dígito verificador da conta corrente para o boleto e arquivos de remessa da Caixa Econômica Federal (Banco 104) de acordo com o Manual de Leiaute de Arquivo Eletrônico Padrão CNAB 240 - Cobrança Bancária Caixa - SIGCB - Versão 67.118 v024 micro. Tenha certeza de verificar sua versão do manual antes de usar o código abaixo.

O Dígito Verificador da Conta é um código adotado pelo banco, em nosso caso a Caixa Econômica, para verificação da autenticidade do número da conta corrente, e tal número deverá ser calculado através do módulo 11.

Mostro abaixo o código completo para o cálculo do dígito verificador. Note que só precisamos informar o número da conta (sem o dígito) e o código se encarrega de calcular o dígito. Aqui eu informei o número da conta em uma variável, mas você pode modificar o código para que o valor venha de um formulário ou do banco de dados.

Eis o código PHP:

<?php
// função que recebe o número da conta e devolve
// o dígito verificador
function digitoVerificadorConta($conta){
  // primeiro vamos remover os espaços do número da conta
  $conta = trim($conta);
  // agora precisamos adicionar os zeros necessários
  // para completar 12 posições
  $conta = sprintf("%012d", $conta);
  // agora vamos definir os índices de múltiplicação
  $indices = "543298765432";
  // e aqui a soma da multiplicação coluna por coluna
  $soma = 0;
	
  // fazemos a multiplicação coluna por coluna agora
  for($i = 0; $i < strlen($conta); $i++){
   $soma = $soma + ((int)($conta[$i])) * 
     ((int)($indices[$i]));	
  }
	
  // obtemos o resto da divisão da soma por onze
  $resto = $soma % 11;
	
  // subtraímos onze pelo resto da divisão
  $digito = 11 - $resto;
	
  // atenção: Se o resultado da subtração for
  // maior que 9 (nove), o dígito será 0 (zero)
  if($digito > 9){
    $digito = 0;	
  }
	
  return $digito;  
}
  
// vamos obter o dígito verificador para a conta a seguir
$conta = "109990";
$digito = digitoVerificadorConta($conta);
echo "O dígito verificador para a conta " . $conta .
  " é: " . $digito;
?>

Ao executar este código PHP nós teremos o seguinte resultado:

O dígito verificador para a conta 109990 é: 6

É importante observar que o dígito verificador da agência e também do par agência/conta são sempre informados pela Caixa, geralmente pela agência na qual nossos clientes possuem conta.


PHP ::: Dicas & Truques ::: Data e Hora

Datas e horas em PHP - Como obter o último dia útil para um determinado mês e ano

Quantidade de visualizações: 11921 vezes
Nesta dica veremos como é possível combinar as funções cal_days_in_month(), mktime() e date() para obter o último dia útil de um determinado mês e ano. Se você tiver uma base de dados de feriados municipais, estaduais e federais, você poderá implementar esta funcionalidade facilmente.

Veja o código PHP completo para o exemplo:

<html>
<head>
<title>Estudando PHP</title>
</head>
<body>
 
<?php
  $mes = 1; // mês começa em 1
  $ano = 2021;
  // vamos obter a quantidade de dias no mês
  $dias = cal_days_in_month(CAL_GREGORIAN, $mes, $ano);
  $ultimo = mktime(0, 0, 0, $mes, $dias, $ano); 
  $dia = date("j", $ultimo);
  $dia_semana = date("w", $ultimo);
   
  // domingo = 0;
  // sábado = 6;
  // verifica sábado e domingo
  if($dia_semana == 0){
    $dia = $dia - 2; // voltamos para sexta-feira
  }
  
  if($dia_semana == 6){
    $dia--; // voltamos para sexta-feira
  }  

  $ultimo = mktime(0, 0, 0, $mes, $dia, $ano);
  echo "O último dia útil para o mês informado é: " . 
    date("d/m/Y", $ultimo);
?>
  
</body>
</html>

Ao executar este código PHP nós teremos o seguinte resultado:

O último dia útil para o mês informado é: 29/01/2021


Veja mais Dicas e truques de PHP

Dicas e truques de outras linguagens

Quem Somos

Osmar J. Silva
WhatsApp +55 (062) 98553-6711

Goiânia-GO
Full Stack Developer, Professional Java Developer, PHP, C/C++, Python Programmer, wxWidgets Professional C++ Programmer, Freelance Programmer. Formado em Ciência da Computação pela UNIP (Universidade Paulista Campus Goiânia) e cursando Engenharia Elétrica pela PUC-Goiás. Possuo conhecimentos avançados de Java, Python, JavaScript, C, C++, PHP, C#, VB.NET, Delphi, Android, Perl, e várias tecnologias que envolvem o desenvolvimento web, desktop, front-end e back-end. Atuo há mais de 15 anos como programador freelancer, atendendo clientes no Brasil, Portugal, Argentina e vários outros paises.
Entre em contato comigo para, juntos, vermos em que posso contribuir para resolver ou agilizar o desenvolvimento de seus códigos.
José de Angelis
WhatsApp +55 (062) 98243-1195

Goiânia-GO
Formado em Sistemas de Informação pela Faculdade Delta, Pós graduado em Engenharia de Software (PUC MINAS), Pós graduado Marketing Digital (IGTI) com ênfase em Growth Hacking. Mais de 15 anos de experiência em programação Web. Marketing Digital focado em desempenho, desenvolvimento de estratégia competitiva, analise de concorrência, SEO, webvitals, e Adwords, Métricas de retorno. Especialista Google Certificado desde 2011 Possui domínio nas linguagens PHP, C#, JavaScript, MySQL e frameworks Laravel, jQuery, flutter. Atualmente aluno de mestrado em Ciência da Computação (UFG)
Não basta ter um site. É necessário ter um site que é localizado e converte usuários em clientes. Se sua página não faz isso, Fale comigo e vamos fazer uma analise e conseguir resultados mais satisfatórios..

Linguagens Mais Populares

1º lugar: Java
2º lugar: C#
3º lugar: PHP
4º lugar: Delphi
5º lugar: Python
6º lugar: JavaScript
7º lugar: C
8º lugar: C++
9º lugar: VB.NET
10º lugar: JSP (Java Server Pages)



© 2021 Arquivo de Códigos - Todos os direitos reservados | Versión en Español | Versão em Português