comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Property en PHP

  • 3 Respuestas
  • 1651 Vistas

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

Desconectado alexander1712

  • *
  • Underc0der
  • Mensajes: 850
  • Actividad:
    0%
  • Reputación -2
    • Ver Perfil
    • El blog del programador
    • Email
« en: Octubre 06, 2013, 05:51:03 pm »
Haciendo mi segunda versión de la clase BBParser (que publiqué anteriormente la versión 1), mientras refinaba el código que había escrito, miraba la documentación de php. Hace unos días había oído que php era una basura como lenguaje, y uno de los argumentos del expositor de dicho mensaje, era que php no daba soporte al famoso y muy útil property.
Todos sabemos que si nos basamos en los principios de encapsulamiento no podemos tener atributos públicos que sean accesibles directamente desde fuera de las clase, por lo que la solución a éste problema era simple, crear funciones públicas que cambien los valores y/o los obtengan, de aquellos atributos privados. Para lo cual surgen las funciones getter y setters, no obstante, si uno hacía un módulo, tendría que explicarle a los que lo usaran (si no eran muy experimentados) que habían funciones para setear valores, y funciones para obtenerlos, y posiblemente se le haría una confusión porque, para setear un valor a una variable simplemente uno pone $variable = $valor; pero para setear valores de esta forma tenemos que usar una función setear_variable($valor); lo cual es muy diferente y le podría dar confusión, para solucionar esto, y quitar este peso absolutamente innecesario, se creó el property, que son unas pocas lineas de código que especifican que cuando alguien quiere acceder a una propiedad privada, se llama a una función que manipule la propiedad y devuelva el resultado, dando entonces que a una clase que tiene un atributo privado como la que pondré más abajo, se pueda acceder "directamente" o eso parecería, aunque internamente pasa por funciones que manipulan el atributo.
Para mala suerte de la persona que dijo que el property no era posible en php porque el lenguaje no lo soportaba, estaba equivocado, y con un par de funciones mágicas pude hacer un property, que lo puse en un trait para que pueda ser usado en cualquier clase cuantas veces sea necesario (según la cantidad de clases).

aquí les dejo el property que lo verán en la nueva versión de mi clase controladora de bbcodes.

Código: PHP
  1.        
  2.  
  3.     /** Property para php
  4.      *  ésto fué escrito por alexander171294 - [H]arkonnen
  5.      *  como parte del módulo BBParser 1.1.0
  6.      *  @ Contact: alexander171294@gmail.com
  7.      */  
  8.     trait MyProperty // mi hermoso trait property
  9.     {
  10.         // llamando a funciones setters
  11.         Public function __set($property, $value)
  12.         {
  13.             if(No tienes permisos para ver links. Registrate o Entra con tu cuenta(No tienes permisos para ver links. Registrate o Entra con tu cuenta($this, 'set_'.$property), $value))
  14.                 return No tienes permisos para ver links. Registrate o Entra con tu cuenta(No tienes permisos para ver links. Registrate o Entra con tu cuenta($this, 'set_'.$property), $value);
  15.             else
  16.             // no hay funcion setter para este atributo (o no existe el atributo)
  17.                 return false;
  18.         }
  19.        
  20.         // llamando a funciones getters
  21.         Public function __get($property)
  22.         {
  23.             if(No tienes permisos para ver links. Registrate o Entra con tu cuenta(No tienes permisos para ver links. Registrate o Entra con tu cuenta($this, 'get_'.$property)))
  24.                 return No tienes permisos para ver links. Registrate o Entra con tu cuenta(No tienes permisos para ver links. Registrate o Entra con tu cuenta($this, 'get_'.$property));
  25.             else
  26.             // no hay funcion getter para este atributo (o no existe el atributo)
  27.                 return false;
  28.         }
  29.     }
  30.      
  31.     /* implementación de ejemplo: */
  32.      
  33.     Class prueba
  34.     {
  35.     use MyProperty;
  36.             private $ejemplo = 0; // variable privada a la que accederemos
  37.      
  38.             // getter
  39.             private get_ejemplo()
  40.             {
  41.                     return $ejemplo;
  42.             }
  43.            
  44.             // setter
  45.             private set_ejemplo($value)
  46.             {
  47.                     $this->ejemplo = $value;
  48.             }
  49.     }
  50.      
  51.     $example = new prueba();
  52.      
  53.     $example->ejemplo = 2;
  54.     echo $example->ejemplo;
  55.      
  56.     // como verán, se puede acceder al atributo privado aparentemente "directamente" no obstante, previamente el código llama a las funciones getters y setters para los atributos privados a los que queremos acceder, por lo tanto no viola los principios de encapsulamiento :)
  57.  

también lo pueden ver desde pastebin No tienes permisos para ver links. Registrate o Entra con tu cuenta

saludos!
« Última modificación: Octubre 06, 2013, 05:57:23 pm por alexmanycol »

Marcado como mejor respuesta por: en Septiembre 07, 2018, 04:45:29 pm

Conectado ANTRAX

  • *
  • Administrator
  • Mensajes: 5375
  • Actividad:
    73.33%
  • Reputación 31
  • ANTRAX
    • Ver Perfil
    • Underc0de
    • Email
  • Skype: underc0de.org
  • Twitter: @Underc0de
« Respuesta #1 en: Octubre 06, 2013, 05:52:05 pm »
Excelente aporte! Esta muy bueno Ale!
Felicitaciones!


Desconectado Xt3mP

  • *
  • Underc0der
  • Mensajes: 432
  • Actividad:
    0%
  • Reputación 0
  • Ellos me están buscando, pero yo los encontraré.
    • MSN Messenger - Xt3mP@h4x0rz.us
    • AOL Instant Messenger - Xt3mP@h4x0rz.us
    • Yahoo Instant Messenger - Xt3mP@h4x0rz.us
    • Ver Perfil
    • Xt3mP
« Respuesta #2 en: Octubre 07, 2013, 12:18:01 pm »
Excelente manera de utilizar los famosos Traits; hace ya mas de unos tres meses cuando los leí por primera vez con la nueva versión de PHP me di cuenta que para mi y seguro para muchos fue la salvación para lo que es POO.

P.D. Ya que tu complemento es bueno y a más de uno le servira, dejo a continuación el siguiente link para que comprendan un poco más sobre el tema: No tienes permisos para ver links. Registrate o Entra con tu cuenta

Saludos,
Xt3mP.
Cada vez que me das Karma me motivas

Desconectado alexander1712

  • *
  • Underc0der
  • Mensajes: 850
  • Actividad:
    0%
  • Reputación -2
    • Ver Perfil
    • El blog del programador
    • Email
« Respuesta #3 en: Octubre 07, 2013, 05:41:23 pm »
No tienes permisos para ver links. Registrate o Entra con tu cuenta
Excelente manera de utilizar los famosos Traits; hace ya mas de unos tres meses cuando los leí por primera vez con la nueva versión de PHP me di cuenta que para mi y seguro para muchos fue la salvación para lo que es POO.

P.D. Ya que tu complemento es bueno y a más de uno le servira, dejo a continuación el siguiente link para que comprendan un poco más sobre el tema: No tienes permisos para ver links. Registrate o Entra con tu cuenta

Saludos,
Xt3mP.

jajaja, yo cuando lo vi dije "oh dios, lo amo, y aún no lo usé por primera vez" jajaja, la verdad que si es muy útil, además buen ejemplo con la implementación de singleton en trait, no se me había ocurrido jajaja.

saludos!

 

¿Te gustó el post? COMPARTILO!