Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

joblopes

Dúvidas sobre o uso de atributos estáticos

Recommended Posts

Saudações aos amigos do Fórun. Ao estudar a criação de classes e construtores em PHP, tenho visto mais a estrutura em que declara-se uma classe com seus atributos privados e depois um
construtor em que seus parâmetros setarão valores para os atributos da calsse, como o código abaixo:

class conecta {
    
    private  $SENHA;
    private  $USUARIO;
    private  $BANCO;
    private  $LOCAL;
    
    function __construct($SENHA, $USUARIO, $BANCO_DE_DADOS, $LOCAL) {
        $this->SENHA   = $SENHA;
        $this->USUARIO = $USUARIO;
        $this->BANCO   = $meu_banco;
        $this->LOCAL   = $LOCAL;
      }
   }

Mais depois vi uma estrutura parecida, só que usando constantes(definidas previamente em arquivo separado)    e depois fez uso de atributos estáticos:  

config.inc.php
           
           //Declarando constantes e Autoload das classes
      define('USUARIO', 'root');
      define('SENHA', 'job');
      define('BANCO_DE_DADOS', 'curso_xmd');
      define('LOCAL', 'localhost');
      
      //AUTOLOAD DE CLASSES
      function __autoload($Classe){
      require _DIR_ . '/crud'. $Classe . 'class.php';
//____________________________________________________________________________________
    Class ConectaBanco
      
    private static $SENHA; 
    private static $SUSUARIO; 
    private static $BANCO; 
    private static $LOCAL; 
    
    function __construct() {
        
        self::$SENHA    = SENHA;
        self::$SUSUARIO = USUARIO;
        self::$BANCO = meu_banco;
        self::$LOCAL    = LOCAL;
    }
  }

Gostaria de saber qual estrutura seria mais usual e o porque do uso dos atributos estáticos ao inves de apenas declará-los como privados.

Obrigado a todos

Compartilhar este post


Link para o post
Compartilhar em outros sites

O segundo exemplo é uma forma de como não deve ser desenvolvida uma classe de conexão. A primeira, não que seja o estado da arte, está melhor estruturada.

 

Praticamente, isso tem haver com encapsulamento. Encapsulamento não é tornar métodos públicos em privados (apesar de isso ocorrer) e sim dar sentido a um conjunto de dados sem sentido.

 

Por exemplo, um conjunto de dados que, separados, podem ser o seguinte:

$w= 10;
$h = 5;

Essas variáveis podem ser qualquer coisa, mas não possuem um sentido,

class Rectangle
{
    private $h;
    private $w;

    public function __construct(float $width , float $height)
    {
         $this->h = $height;
         $this->w = $width;
    }

    public function getArea()
    {
         return $this->h * $this->w;
    }
}

Agora as duas variáveis foram encapsuladas em um objeto Rectangle (retângulo) e possuem um sentido, são a altura e largura do retângulo.

 

Isso é um pouco do que o seu primeiro exemplo faz. O segundo exemplo, ele fixa as variáveis de forma global e não importa o que ocorrer no decorrer do código, você nunca poderá ter duas conexões distintas (para servidores diferentes) a não ser que modifique o código base.

 

Um exemplo similar seria o singleton, que você pode visualizar aqui:

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.