Ola pessoal.Ja faz um bom tempo que eu nao escrevo por aqui, mas quem e vivo sem aparece.Pretendo dar continuidade em um post antigo que falo sobre boas praticas no momento de escrever seu codigo.Let's go!1a boa pratica de hoje: Argumentos nao mudam de estado.Quando trabalhamos com funcoes ou metodos, e normal termos argumentos, como abaixo:<?phpfunction yourMethod($argument1) { // your code here}Nesse exemplo temos o metodo "yourMethod" que recebe o "$argument1" como argumento.Dentro desse metodo nao mude o valor/estado desse argumento. Dessa maneira nao importa em que lugar dentro do metodo voce esta usando essa variavel, ela sempre estara como o mesmo estado de entrada.Com isso voce nao precisa se preocupar em saber se a variavel foi alterada ou nao dentro do metodo/funcao. Com essa abordagem garantimos a integridade.2a boa pratica: Uma operacao por linhaAo fazer operacoes no seu codigo, nao acumule operacoes na mesma linha, exemplo:<?php$variable = function1(function2(function3()));Isso complica muito a leitura e o entendimento. Uma melhor abordagem seria como abaixo:<?php$variable1 = function1();$variable2 = function2($variable1);$variable3 = function3($variable2);Como esse exemplo e hipotetico as funcoes e varieveis estao como pessimos nomes, mas no seu codigo use nomes que melhor expresse a sua regra de negocio.3a boa pratica: Metodos estaticos em contexto estaticoQuando trabalhamos com orientacao a objetos, normalmente criamos metodos, mas diversas vezes nao usamos o contexto correto para eles. O de instancia ou estatico.Quando criamos um metodo que nao depende da instancia, ele deve ser estatico. Vamos ao exemplo que mostra exatamente essa falha:<?phpclass Force{ private $hiddenPower; public function readMind() { $this->hiddenPower->read(); } public function getDefinition() { return "Well, the Force is what gives a Jedi his power. ". "It's an energy field created ". "by all living things. It surrounds us and penetrates us; ". "it binds the galaxy together."; }}class Jedi{ /** * @var Force */ private $force; /** * Jedi constructor. * * @param Force $force */ public function __construct(Force $force) { $this->force = $force; } public function getTheForceDefinition() { return $this->force->getDefinition(); }}$force = new Force();$jedi = new Jedi($force);$jedi->getTheForceDefinition();A classe "Jedi" recebe no seu construtor uma instancia de "Force" e tem um metodo chamado "getTheForceDefinition" que retorna uma explicacao sobre A Forca. Mas esse metodo usa a instancia de "Force" para isso.Se observarmos a classe "Force", podemos ver que ela tem um metodo "getDefinition". E aqui esta o nosso GRANDE detalhe. Esse metodo nao depende de nada da instancia. Ele simplesmente retorna uma String que sempre e a mesma. Isso quer dizer que o resultado nao muda de instancia para instancia.Entao concluimos que esse metodo deveria ser ESTATICO \o/.A solucao correta ja com a alteracao seria assim:<?phpclass Force{ private $hiddenPower; public function readMind() { $this->hiddenPower->read(); } public static function getDefinition() { return "Well, the Force is what gives a Jedi his power. ". "It's an energy field created ". "by all living things. It surrounds us and penetrates us; ". "it binds the galaxy together."; }}class Jedi{ /** * @var Force */ private $force; /** * Jedi constructor. * * @param Force $force */ public function __construct(Force $force) { $this->force = $force; } public function getTheForceDefinition() { return Force::getDefinition();