Introducción a la Programación Orientada a Objetos en PHP

* Síntesis del libro «POO y MVC en PHP» de Eugenia Bahit
** Foro dedicado al tema: Foro de POO y MVC en PHP

Definición: La POO es una técnica de programación que utiliza objetos e interacciones en el diseño de un sistema.

Elementos: Se compone de clases, objetos, métodos, eventos, propiedades y atributos.

Características: Abstracción, encapsulamiento, modularidad, ocultación, polimorfismo y herencia.

 

CLASES EN PHP

Éstas pueden ser:

Instanciables (también pueden ser heredadas):

<?php
class MiClaseInstanciable {
}
?>

Abstractas (no instanciables pero sí heredables):

<?php
abstract class MiClaseAbstracta {
}
?>

Finales (instanciables no heredables):

<?php
final class MiClaseFinal {
}
?>

Heredadas (instanciables heredables, que a la vez heredan de una clase «madre»):

<?php
class MiClaseHija extends MiClaseMadre {
}
?>

PROPIEDADES DE CLASE EN PHP

Éstas pueden ser:

Públicas (accesibles desde cualquier parte de la aplicación):

<?php
class Ejemplo {
	public $propiedad = 'Valor';
}
?>

Protegidas (solo accesibles desde la clase que las declara y clases que la heredan):

<?php
class Ejemplo {
	protected $propiedad = 'Valor';
}
?>

Privadas (solo accesibles desde la clase que las declara):

<?php
class Ejemplo {
	private $propiedad = 'Valor';
}
?>

Estáticas (aquellas que no pueden ser modificadas):

<?php
class Ejemplo {
	static $propiedad = 'Valor';
}
?>

Estas propiedades estáticas pueden tener cualquier visibilidad: pública, privada o protegida:

<?php
class Ejemplo {
	// no se modifica.
	// Se accede desde cualquier parte de la aplicación
	public static $public_static = 'Valor';

	// no se modifica.
	// Se accede desde la clase que la declara
     // y desde las que la heredan
	protected static $protected_static = 'Valor';

	// no se modifica.
	// Se accede desde la clase que la declara
	private static $private_static = 'Valor';
}
?>

CONSTANTES DE CLASE

Tienen visibilidad pública (como las propiedades públicas) y no pueden modificarse (al igual que las propiedades estáticas).

<?php
class Ejemplo {
	const MI_CONSTANTE = 'Valor';
}
?>

Métodos de clase en PHP: éstos, pueden, al igual que las propiedades, ser:

Dinámicos : aquellos que efectúan cambios a la clase y/o acceden dinámicamente a sus propiedades.
Estáticos : no efectúan cambios de ningún tipo y su función, en consecuencia, es estática.
Públicos, privados o protegidos : donde aplica la misma visibilidad descrita en las propiedades.

<?php
class Ejemplo {

	public $propiedad = 'valor';
	static $variable = 'valor de variable';

	public function metodo_publico($valor) {
		$this->propiedad = $valor;
		// modifica el valor de la propiedad
	}

	static function metodo_estatico() {
		return 45;
		// siempre retorna el número 45
	}

	private function metodo_privado() {
		// a este método solo se puede acceder desde esta clase
	}
}
?>

CREACIÓN DE OBJETOS EN PHP Y LLAMADA A LAS PROPIEDADES Y MÉTODOS DE UNA CLASE

Crear un objeto para luego acceder a sus propiedades y métodos:

$nuevo_objeto = new NombreDeLaClase();

Acceder a las propiedades públicas NO estáticas:

$nuevo_objeto->propiedad_publica;

Acceder a los métodos públicos NO estáticos:

$nuevo_objeto->metodo_publico();

Acceder a propiedades estáticas públicas (no debe instanciarse el objeto):

NombreDeLaClase::$propiedad_publica_estatica;

NombreDeLaClase::CONSTANTE_DE_CLASE;

Acceder a métodos públicos y estáticos (no debe instanciarse el objeto):

NombreDeLaClase::metodo_publico_estatico();

Referencia a propiedades y métodos dentro de la misma clase:

<?php
class Ejemplo {
	static $propiedad_estatica = 1;
	const CONSTANTE = 15;
	public $propiedad_dinamica = 0;

	static function metodo_estatico() {
		return 45;
	}

	function metodo_dinamico() {
		// aceder a una propiedad dinámica y modificar su valor
		$this->propiedad_dinamica = 100;

		// acceder a un método estático
		$numero = self::metodo_estatico();

		// acceder a una propiedad estática o constante
		print self::$propiedad_estatica;
		print self::CONSTANTE;
	}

	function otro_metodo() {
		// acceder a un método dinámico
		$this->metodo_dinamico();
	}
}
?>

Referencia a propiedades y métodos dentro de una clase hija (heredada):

<?php
class ClaseHija extends Ejemplo {

	function metodo_hijo() {
		// aceder a una propiedad dinámica de la clase madre y modificar su valor
		$this->propiedad_dinamica = 100;

		// acceder a un método estático de la clase madre
		$numero = parent::metodo_estatico();

		// acceder a una propiedad estática o constante de la clase madre
		print parent::$propiedad_estatica;
		print parent::CONSTANTE;

		// acceder a un método dinámico de la clase madre
		$this->metodo_dinamico();
	}
}
?>

Puedes descargar el libro «POO y MVC en PHP» de Eugenia Bahit haciendo click aquí, o entrar en el Foro de POO y MVC en PHP.