Programación orientada a objetos con PHP (V), public vs private.

Programacion orientada objetos PHP

 

Modificadores de acceso: público versus privado

En los tutoriales anteriores, utilizamos el modificador de acceso público en frente de los métodos y propiedades en nuestras clases sin ninguna explicación. El modificador de acceso public solo uno de los varios modificadores que utilizamos. Aprenderemos sobre otro modificador llamado modificador de acceso private.

Mientras que el modificador de acceso público permite que un código externo o interno de la clase acceda a los métodos y propiedades de la clase, el modificador privado impide el acceso a los métodos o propiedades de una clase desde cualquier código que esté fuera de la clase.

 

El modificador de acceso «public»

El siguiente ejemplo ya debería serle familiar. En el ejemplo, la propiedad y el método de la clase se definen como públicos , por lo que el código fuera de la clase puede interactuar directamente con ellos.

 

<?php class Car { 
// public methods and properties. 

public $model; 
public function getModel()   { 
return "El modelo de coche es " . $this -> model;   
} 
}   

$mercedes = new Car(); 
//Aquí accedemos a una propiedad desde fuera de la clase
$mercedes -> model = "Mercedes" ; 

//Aquí accedemos a un método desde fuera de la clase
echo $mercedes -> getModel();
 

Resultado:
El modelo de coche es Mercedes

 

El modificador de acceso «private»

Podemos evitar el acceso a las propiedades y métodos dentro de nuestras clases si los definimos con el modificador de acceso privado en lugar del modificador de acceso público .

En el siguiente ejemplo, definimos la propiedad $model como privada, y cuando intentamos establecer su valor desde fuera de la clase, encontramos un error fatal.

<?php class Car { 

//private 
private $model; 
public function getModel()  { 
return "The car model is " . $this -> model;  
} 
} 

$mercedes = new Car(); 
// Intentamos acceder a una propiedad privada desde fuera de la clase. 
$mercedes -> model = "Mercedes benz" ; 
echo $mercedes -> getModel(); 
?>
 

Resultado:
Error fatal: no se puede acceder a la propiedad privada Car :: $model

 

¿Cómo acceder a una propiedad privada?

Vimos que no tenemos acceso a propiedades privadas desde fuera de la clase, pero aún tenemos que establecer de alguna manera y obtener los valores de las propiedades.

Para interactuar con propiedades privadas, utilizamos métodos públicos porque pueden interactuar tanto con el código fuera del alcance de la clase como con el código dentro de la clase. Los métodos públicos que pueden interactuar de esta manera se dividen comúnmente en dos tipos de métodos:

  • Setters que establecen los valores de las propiedades privadas.
  • Getters que obtienen los valores de las propiedades privadas.

En el siguiente ejemplo, veremos que podemos obtener y establecer el valor de una propiedad privada, $carModel , mediante el uso de los métodos setter y getter.

Usaremos el método setModel() para establecer el valor del modelo de automóvil, y el método getModel() para obtener el valor de la propiedad.

<?php class Car { 
//el modificador de acceso privado niega el acceso al método desde fuera del alcance de la clase
private $model; 

//El modificador de acceso público permite el acceso al método desde fuera de la clase 
public function setModel($model)  { 
$this -> model = $model;  
} 
public function getModel()  { 
return "El modelo de coche es " . $this -> model;  
} 
} 

$mercedes = new Car(); 
//Sets the car's model 
$mercedes -> setModel( "Mercedes benz" ); 

//Gets the car's model 
echo $mercedes -> getModel(); ?>
 

Resultado:
El modelo de coche es Mercedes benz

 

¿Por qué necesitamos modificadores de acceso?

Necesitamos modificadores de acceso para limitar las modificaciones que el código externo puede hacer a los métodos y propiedades de las clases.

Una vez que definimos una propiedad o método como privado , solo los métodos que están dentro de la clase pueden abordarla. Entonces, para interactuar con métodos y propiedades privadas, necesitamos proporcionar métodos públicos. Dentro de estos métodos, podemos poner una lógica que pueda validar y restringir los datos que provienen de fuera de la clase.

En nuestro ejemplo, podemos validar que solo ciertos modelos de automóviles pueden abrirse camino y ser asignados a la propiedad privada $model , definiendo las alternativas permitidas para modelos en el método público setModel() . Para este propósito, definimos dentro del método setModel() una matriz de modelos de automóviles permitidos, y verificamos que solo estos modelos estén asignados a la propiedad $model.

 

<?php class Car { 
//el modificador de acceso privado niega el acceso a la propiedad desde fuera del alcance de la clase
private $model; 

//El modificador de acceso público permite el acceso al método desde fuera de la clase
public function setModel($model)  { 

//validar que solo ciertos modelos de automóviles se asignan a la propiedad $carModel    
$allowedModels = array( "Mercedes benz" , "BMW" );     
if(in_array($model,$allowedModels))    { 
$this -> model = $model;    
}    else    { 
$this -> model = "este modelo no existe." ;    
}  
} 

public function getModel()  { 
return "El modelo es " . $this -> model;  
} 
}  

$mercedes = new Car(); 

//Sets the car's model 
$mercedes -> setModel( "Mercedes benz" ); 

//Gets the car's model 
echo $mercedes -> getModel(); ?>
 

 

Conclusión

Hasta ahora, hemos aprendido sobre dos modificadores de acceso:

  • public, que permite que funciones externas modifiquen el código dentro de una clase,
  • private, que evita que cualquier código externo a la clase cambie las propiedades y métodos que protege.

Vimos que, para modificar métodos y propiedades privadas, podemos usar métodos públicos que tienen el privilegio de interactuar con el código fuera del alcance de la clase. 

 

Compartir esta entrada.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

CAPTCHA ImageChange Image