joblopes 0 Denunciar post Postado Agosto 24, 2017 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
Gabriel Heming 766 Denunciar post Postado Agosto 24, 2017 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