ObjetivoPHP

Modificadores de acceso y abstract, final, static (POO 04)

por ObjetivoPHP el Sep.26, 2009, bajo Orientacion a Objetos

Los modificadores de acceso nos dan la posibilidad de poder establecer la visibilidad de los atributos y métodos de una clase, o de una manera mas sencilla es un forma de establecer los permisos que tendran otros objetos para acceder a los métodos y atributos de la clase.

Modificador public
Es el modificador de acceso por defecto es decir si no ponemos nada en el atributo o metodo este tomara el modificador public o sea que el método o atributo sera publico.

  • public aplicado a un atributo o método: significa que es accesible por cualquier clase que los invoque desde una referencia a un objeto de la clase contenedora. Resumiendo se accede desde cualquier objeto haciendo referencia al objeto propietario.
  • public no se puede aplicar a clases como por ejemplo en JAVA.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class modificadores
{	
	public	$mensajeUno;
	private	$mensajeDos;
 
	public function getMensajeUno()
	{
		echo $this->mensajeUno;
	}
 
	public function getMensajeDos()
	{
		echo $this->mensajeDos;
	}
}
$modificador	= new modificadores();
$modificador	->mensajeUno = 'Probando Modificadores';
$modificador	->getMensajeUno();
?>

En este caso como el atributo $mensajeUno es publico se puede acceder desde fuera de la clase, con tener una instancia en este caso $modificador lo podemos cambiar y tambien desplegar aunque en este caso usamos el metodo publico getMensajeUno.

Modificador private
Se puede aplicar tanto a atributos como métodos y es el nivel mas restrictivo de todos. Solo permite acceder desde el propio objeto, nunca desde fuera. Si nosotros intentáramos configurar el atributo mensajeDos como el Uno nos daría un error, para poder cambiar el texto tenemos que crear un método publico que realice la tarea.
Un ejemplo del método necesario seria:

1
2
3
4
public function setMensajeDos($texto)
	{
		$this->mensajeDos	= $texto;
	}

Ejemplo de como accederiamos es el siguiente:

$modificador	= new modificadores();
$modificador	->mensajeDos = 'Probando Modificadores'; 	// Error
$modificador	->setMensajeDos('Asi se debe realizar');	// Correcto
$modificador	->getMensajeDos();

Modificador protected
Es un nivel intermedio de accesibilidad. Si lo aplicamos a un atributo o método este sera accesible desde la propia clase y desde las clases que heredan de esta. Fuera de estas clases se comportan como si fueran atributos o metodos privados.

abstract

PHP 5 introduce las clases y métodos abstractos. Cuando una clase es abstracta no se permite crear una instancia de la misma. Si una clase contiene un metodo abstracto la misma debera ser declarada como abstracta. Los métodos definidos como abstractos no se implementan en dicha clase simplemente se declara la firma del mismo.

Cuando heredamos de una clase abstracta, todos los métodos definidos como abstractos en la clase padre, deben ser definidos en la clase hijo, teniendo en cuenta que la visibilidad de los mismos no puede ser menor a la definida en el metodo declarado como abstracto es decir no se puede restringir la visibilidad. A modo de ejemplo si un metodo es declarado como protected en la clase abstracta, cuando implementamos el mismo en la clase hija el mismo debera ser protected o public pero nunca podra ser private pues estariamos restringiendo la visibilidad.

Resumiendo:

  • Aplicado a un metodo significa que no se implementa en la clase actual.
  • Aplicado a una clase significa que no se puede instanciar.

final

  • Aplicado a un atributo significa que es invariante (constante).
  • Aplicado a un metodo significa que no se puede sobreescribir. Es decir la clase que hereda no puede volver a implementar el metodo.
  • Aplicado a una clase significa que no se puede heredar.

static
La declaración de atributos de clase o métodos como estático los hace accesibles sin necesitar un instancia de la clase. No se puede tener acceso a una propiedad declarada como estática con una variable que es una instancia del objeto (aunque un método estático pueda) y no puede ser redefinido en una clase que herede de esta.

La declaracion de static tiene que estar despues de la declaracion de visibiliadad, para la compatibilidad con PHP 4, si no se declara la visibilidad del atributo o metodo definido como static, entonces PHP los tratara como si fuesen public (publicos).

Como los métodos estáticos son accesibles sin una instancia del objeto,lapseudovariable $this no está disponible dentro del método declarado como estático, para esto se debera usar self::.

Las propiedades estáticas no pueden ser accesadas a través del objeto usando el operador de flecha ->.

La llamada a métodos no estáticos desde un metodo estatico genera una advertencia de nivel E_STRICT.

Una variable estatica solo se puede inicializar usando un literal o una constante, no se permite que sea con expresiones . Usted puede inicializar una propiedad estatica a un entero(integer) o a un arreglo (array) como cualquier otra variable, pero no se puede inicializar a una variable, un retorno de una funcion o un objeto.

Si una variable se etiqueta como static, solo existira un ejemplar para todos los objetos de la clase.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
class estatica
{	static 	$variable	= 3;
 
	public function getVariable()
	{	echo "<br />Static: " . self::$variable;	}
 
	public function setVariable($valor)
	{	self::$variable	= $valor;	}
}
// Creamos 2 instancias para ver que el valor es para
// todas las instancias.
$modificador1	= new estatica(); 
$modificador2	= new estatica();
// Formas de acceder al valor
echo "Ver Directamente:" . estatica::$variable;
$modificador1	->getVariable();
// Cambiamos el valor con el modificador1
// y mostramos el valor del 2.
$modificador1 	->setVariable(5);
$modificador2	->getVariable();
/* SALIDA POR PANTALLA
Ver Directamente:3
Static: 3	 # con modificador1
Static: 5	 # con modificador2
 */
?>

Fuente:

:, , , , , , ,

Dejar un Comentario

Busca algo

Use el formulario debajo para buscar en el sitio:

Todavía no a encontrado lo que usted busca? Deje un comentario, o póngase en contacto con nosotros así podremos ayudarlo.

Visite a nuestros amigos!

Recomendamos las siguientes paginas amigas...

Archivo

Todas las entradas, cronológicamente...