PHP: Propiedades de Protected y Private
PHP: Propiedades de Protected y Private. En muchos de mis proyectos de desarrollo en PHP, finalizo en su mayoria con las clases que tienen funciones no públicas que no tienen intención de extender mas adelante.
Entonces como debemos declarar estos como protegido o privado?
Puedo ver las opciones en ambos haciéndolos privado es un punto mucho más conservador, pero se puede ver que podría hacerse protegidos mas tarde si quiero el método que se extiende y se deja en claro qué métodos se extienden por las clases.
En los ejemplo de PHP que hemos visto hasta ahora, las propiedades se definen utilizando la palabra reservada “public”. En su lugar, podemos definir las propiedades como “protected” o “private” dependiendo.
PHP: Propiedades de Protected y Private
Si se intenta acceder a las propiedades “protected” y “private” utilizando el código “$objeto->propiedad” desde el script que crea el objeto, se produce un error. veamos el ejemplo a continuación.
class ClasePadre { protected $protegida = 'Protegida'; private $privada = 'Privada'; function imprime_las_propiedades() { echo $this->protegida . ", " . $this->privada; echo "n"; } } $obj = new ClasePadre(); // Las siguientes sentencias devuelven un error de la forma // PHP Fatal error: Cannot access protected property ClasePadre::$protegida echo $obj->protegida; // Error Fatal echo $obj->privada; // Error Fatal $obj->imprime__las_propiedades(); // Imprime "Protegida, Privada"
Ambos tipos tienen sus opciones, está en su comportamiento cuando se crea una clase derivada de otra: Una propiedad “protected” es heredada y puede ser redefinida en la clase derivada, pero si se intenta acceder a una propiedad “private” en la clase hija se obtiene el valor “undefined”. veamos el ejemplo.
class ClaseHijo extends ClasePadre { // Podemos redeclarar la variable protected protected $protegida = 'Protegida Hija'; function imprime_las_propiedades() { echo $this->protegida . ", " . $this->privada; echo "n"; } } $obj2 = new ClaseHijo(); echo $obj2->protegida . "n"; // Error Fatal // Las siguiente sentencias devuelven un error de la forma: // PHP Notice: Undefined property: ClaseHijo::$privada echo $obj2->privada . "n"; $obj2->imprime_las_propiedades(); // Imprime "Protegida Hija,"
¿Cuál es la diferencia entre public
, private
y protected
en las aplicaciones PHP?
Veamos a continuación la respuesta:
A grandes rasgos, estas son sus diferencias:
public
: Hace que la variable/función se pueda acceder desde cualquier lugar, como por ejemplo otras clases y otras instancias de esa misma clase.private:
Hace que la variable/función solamente se pueda utilizar desde la misma clase que las define.protected
: Hace que la variable/función se puede acceder desde la clase que las define y también desde cualquier otra clase que herede de ella.
En otras palabras mas suaves podemos aclarar que:
private
= solo túprotected
= tú y tus descendientespublic
= cualquiera.
Referencias: