Buenas practicas en PHP

  • 2 Respuestas
  • 3153 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado nicolas267

  • *
  • Underc0der
  • Mensajes: 2
  • Actividad:
    0%
  • Reputación 1
    • Ver Perfil
    • Email

Buenas practicas en PHP

  • en: Diciembre 30, 2018, 10:19:17 pm
Hola buenos días a todo los que están leyendo, les vine a presentar algunas buenas prácticas que encontré mientras investigaba sobre php y me ayudaron a mejorar mis códigos.

1. Evitar anidar demasiado

Demasiadas declaraciones if-else puede resultar en un código difícil de leer.

Como no debería ser
Código: PHP
  1. function fibonacci(int $n)
  2. {
  3.     if ($n < 50) {
  4.         if ($n !== 0) {
  5.             if ($n !== 1) {
  6.                 return fibonacci($n - 1) + fibonacci($n - 2);
  7.             } else {
  8.                 return 1;
  9.             }
  10.         } else {
  11.             return 0;
  12.         }
  13.     } else {
  14.         return 'Not supported';
  15.     }
  16. }
  17.  

Como debería ser
Código: PHP
  1. function fibonacci(int $n): int
  2. {
  3.     if ($n === 0 || $n === 1) {
  4.         return $n;
  5.     }
  6.  
  7.     if ($n > 50) {
  8.         throw new \Exception('Not supported');
  9.     }
  10.  
  11.     return fibonacci($n - 1) + fibonacci($n - 2);
  12. }
  13.  

2. No agregar contexto innecesario a las variables

   Si el nombre de la clase/objeto ya hace referencia a lo que es, no hay que repetirlo en las variables

Como no debería ser
Código: PHP
  1.    
  2. class Car
  3. {
  4.     public $carMake;
  5.     public $carModel;
  6.     public $carColor;
  7.  
  8.     //...
  9. }
  10.  

Como debería ser
Código: PHP
  1.    
  2. class Car
  3. {
  4.     public $Make;
  5.     public $Model;
  6.     public $Color;
  7.  
  8.     //...
  9. }
  10.  

3. Idealmente las funciones deben tener 2  o menos argumentos

   Limitar la cantidad de argumentos es muy importante ya que facilita mucho las pruebas de las funciones. Si tienes más de tres argumentos tendrás que probar diferentes situaciones con cada argumento, lo cual se traduce a toneladas de pruebas

   Una función sin argumento es lo ideal, uno o dos está bien, tres debe evitarse, más de tres deben consolidarse. Usualmente cuando una función tiene más de dos argumentos es porque está haciendo demasiadas cosas, en casos en donde es necesario se pasa un objeto como argumento

Como no debería ser   
Código: PHP
  1. function createMenu(string $title, string $body, string $buttonText, bool $cancellable): void
  2. {
  3.     // ...
  4. }
  5.  

Como debería ser
Código: PHP
  1. class MenuConfig
  2. {
  3.     public $title;
  4.     public $body;
  5.     public $buttonText;
  6.     public $cancellable = false;
  7. }
  8.  
  9. $config = new MenuConfig();
  10. $config->title = 'Foo';
  11. $config->body = 'Bar';
  12. $config->buttonText = 'Baz';
  13. $config->cancellable = true;
  14.  
  15. function createMenu(MenuConfig $config): void
  16. {
  17.     // ...
  18. }
  19.  

4. Las funciones solo deben hacer una sola cosa

Esta una de las reglas más importante de todas, cuando las funciones hacen más de una cosa, se hace difícil de componer, testear, y razonarlo. Si una función hace una sola acción se puede refactorizar más fácilmente y se puede leer más claramente

Como no debería ser   
Código: PHP
  1. function emailClients(You are not allowed to view links. Register or Login $clients): void
  2. {
  3.     foreach ($clients as $client) {
  4.         $clientRecord = $db->find($client);
  5.         if ($clientRecord->isActive()) {
  6.             email($client);
  7.         }
  8.     }
  9. }
  10.  

Como debería ser   
Código: PHP
  1. function emailClients(You are not allowed to view links. Register or Login $clients): void
  2. {
  3.     $activeClients = activeClients($clients);
  4.     You are not allowed to view links. Register or Login($activeClients, 'email');
  5. }
  6.  
  7. function activeClients(You are not allowed to view links. Register or Login $clients): You are not allowed to view links. Register or Login
  8. {
  9.     return You are not allowed to view links. Register or Login($clients, 'isClientActive');
  10. }
  11.  
  12. function isClientActive(int $client): bool
  13. {
  14.     $clientRecord = $db->find($client);
  15.  
  16.     return $clientRecord->isActive();
  17. }
  18.  

5. Encapsula las condicionales

Como no debería ser   
Código: PHP
  1. if ($article->state === 'published') {
  2.     // ...
  3. }
  4.  

Como debería ser   
Código: PHP
  1. if ($article->isPublished()) {
  2.     // ...
  3. }
  4.  

6. Evitar las condiciones

Esto parece una tarea imposible. Al escuchar esto por primera vez, la mayoría de la gente dice: "¿cómo se supone que debo hacer algo sin una declaración if?" La respuesta es que puede usar el polimorfismo para lograr la misma tarea en muchos casos. La segunda pregunta suele ser: "bueno, eso es genial, pero ¿por qué querría hacer eso?" La respuesta es un concepto de código limpio que aprendimos anteriormente: una función solo debe hacer una cosa. Cuando tienes y funciones que tienen declaraciones if, estas diciendo que la función hace más de una cosa. Recuerda, solo haz una cosa.

Como no debería ser   
Código: PHP
  1. class Airplane
  2. {
  3.     // ...
  4.  
  5.     public function getCruisingAltitude(): int
  6.     {
  7.         switch ($this->type) {
  8.             case '777':
  9.                 return $this->getMaxAltitude() - $this->getPassengerCount();
  10.             case 'Air Force One':
  11.                 return $this->getMaxAltitude();
  12.             case 'Cessna':
  13.                 return $this->getMaxAltitude() - $this->getFuelExpenditure();
  14.         }
  15.     }
  16. }
  17.  

Como debería ser   
Código: PHP
  1. interface Airplane
  2. {
  3.     // ...
  4.  
  5.     public function getCruisingAltitude(): int;
  6. }
  7.  
  8. class Boeing777 implements Airplane
  9. {
  10.     // ...
  11.  
  12.     public function getCruisingAltitude(): int
  13.     {
  14.         return $this->getMaxAltitude() - $this->getPassengerCount();
  15.     }
  16. }
  17.  
  18. class AirForceOne implements Airplane
  19. {
  20.     // ...
  21.  
  22.     public function getCruisingAltitude(): int
  23.     {
  24.         return $this->getMaxAltitude();
  25.     }
  26. }
  27.  
  28. class Cessna implements Airplane
  29. {
  30.     // ...
  31.  
  32.     public function getCruisingAltitude(): int
  33.     {
  34.         return $this->getMaxAltitude() - $this->getFuelExpenditure();
  35.     }
  36. }
  37.  

Espero que le haya gustado mi primer post y comenten sus opiniones

fuente: You are not allowed to view links. Register or Login (Ingles)

Conectado ANTRAX

  • *
  • Administrator
  • Mensajes: 5702
  • Actividad:
    100%
  • Country: ar
  • Reputación 37
  • ANTRAX
  • Skype: underc0de.org
  • Twitter: @Underc0de
    • Ver Perfil
    • Underc0de
    • Email

Re:Buenas practicas en PHP

  • en: Diciembre 30, 2018, 11:29:40 pm
Muy buen aporte! Le voy a poner chincheta para que quede fijo al principio del foro de PHP.
Es muy muy útil

Muchas gracias!
ANTRAX


Desconectado nicolas267

  • *
  • Underc0der
  • Mensajes: 2
  • Actividad:
    0%
  • Reputación 1
    • Ver Perfil
    • Email

Re:Buenas practicas en PHP

  • en: Diciembre 31, 2018, 11:35:53 am
You are not allowed to view links. Register or Login
Muy buen aporte! Le voy a poner chincheta para que quede fijo al principio del foro de PHP.
Es muy muy útil

Muchas gracias!
ANTRAX

muchas gracias!, me motiva para seguir haciendo más post

 

Mejores prácticas en PHP

Iniciado por Destructor.cs

Respuestas: 4
Vistas: 5006
Último mensaje Abril 02, 2016, 03:07:07 pm
por hielasangre
Buenas prácticas para programar en php (Traducción)

Iniciado por Tulkalex

Respuestas: 3
Vistas: 3309
Último mensaje Febrero 10, 2015, 05:15:00 am
por graphixx
8 buenas practicas en PHP que deberías de usar

Iniciado por graphixx

Respuestas: 2
Vistas: 6120
Último mensaje Marzo 12, 2018, 10:48:46 am
por dr3x