No al cierre de webs
TreeWeb::Artículos::PHP::Orientación a objetos::Instancias y polimorfismo
Permalink: http://www.treeweb.es/u/837/ 14/11/2010

Instancias y polimorfismo

El polimorfismo se da cuando un objeto puede ser utilizado de la misma forma que otro objeto de un tipo parecido.
Por ejemplo, si el objeto B hereda del objeto A, el objeto B se puede utilizar de la misma forma que A.

Ejemplo:
<?php class Hija extends ClasePadre { public function UnaFuncion() { parent::unaFuncion(); } } ?>
Se utiliza la palabra reservada parent para referenciar a métodos y atributos de la clase padre.

Ámbitos

La visibilidad de métodos y atributos está delimitada en tres niveles:
  • public indica que un método o atributo es accesible desde cualquier punto de PHP.
  • private sólo permite acceder a métodos o atributos de la propia clase en la que está definido.
  • protected indica que sólo puede acceder a métodos o atributos desde la propia clase o desde clases herederas.
Además, existen otros modificadores:
  • static indica que el método o atributo es accesible sin necesidad de instanciar la clase. Es muy útil para compartir variables entre todas las instancias de una misma clase. La palabra static también se puede utilizar dentro de métodos o funciones para definir una variable que es global a todas las llamadas de esa función.
  • abstract indica que la clase no puede ser instanciada, sólo puede ser extendida por otra clase.
  • final indica que el método no puede ser redefinido en las clases herederas.
Las variables de una clase también pueden ser declaradas como constantes mediante const. Las constantes son siempre public static y

Ejemplo

<?php abstract class Nodo { private $debugMessages; public function __construct() { $this->debugMessages = array(); $this->debug(__CLASS__." constructor."); } public function __desctruct() { $this->debug(__CLASS__." destructor."); $this->dumpDebug(); } protected function debug($msg) { $this->debugMessages[] = $msg; } private function dumpDebug() { echo implode("\n", $this->debugMessages); } public abstract function getView(); } ?>