27
Al finalizar el captulo, el alumno podr: Utiliza el concepto de objeto en la representacin de los datos. Utiliza los mtodos constructores y destructores para le ejecucin automtica de cdigo. Utiliza el control de acceso a los elementos definidos en una clase. Implementa las caractersticas de herencia entre clases. Emplea clases y mtodos abstractos. Utiliza interfaces para el manejo de objetos.
Temas: 1. 2. 3. 4. 5. 6. 7. Clases. Instanciar objetos. Constructores y destructores. Herencia. Control de acceso a la clase. Clases y mtodos abstractos. Interfaces.
CIBERTEC
28
I.
CIBERTEC
29
1. Clases
1.1. Introduccin
PHP 5 presenta un nuevo y ms completo modelo de Objetos. El manejo de PHP de objetos ha sido reescrito por completo, permitiendo un mejor desempeo y ms caractersticas.
CIBERTEC
30
1.3.
Conceptos fundamentales
Concepto clase
Descripcin Contiene las definiciones de las propiedades y comportamiento de un tipo de objeto concreto. Es la instancia es una entidad que proporciona de un conjunto de propiedades y de comportamiento o funcionalidad los mismos que consecuentemente reaccionan a eventos. Son datos especficos asociados a un objeto (o a una clase de objetos). Algoritmo asociado a un objeto (o a una clase de objetos). Es la facilidad mediante la cual la clase hereda en ella cada uno de las propiedades y mtodos del padre. Significa que las clases pueden tener diferentes comportamientos con respecto a la misma operacin
objeto
1.4.
La definicin bsica de una clase presenta este aspecto: class nombreclass { public $propiedad1; public $propiedad2; function metodo1() { // cdigo del metodo } function metodo2() { //cdigo del metodo } } // fin de la clase
CIBERTEC
31
1.5.
Palabras reservadas
Descripcin Define una clase. Extiende las propiedades y mtodos de una clase. Todos miembros son por defecto del tipo public. Se usa para definir miembros privados que son visibles solo desde el interior de la clase en que han sido definidos Solo se pueden acceder a ellos desde las clases derivadas de aquella. Se utiliza para ejecutar un mtodo o hacer referencia a las propiedades del objeto padre. Impide la redefinicin de mtodos en clases derivadas. Si la propia clase se define como final, entonces no se podr heredar de ella. Seudovariable usada para hacer referencia a la clase desde dentro de ella misma.
$this
CIBERTEC
32
2. Instanciar objetos
2.1.
Instanciar objetos
Tras declarar una clase, tenemos que crear un objeto, esta tarea tambin se conoce como instanciar una clase. Para crear un objeto a partir de una clase, se utiliza la palabra new. $variable = new nombre_de_clase();
2.2.
Para acceder a los elementos de un objeto se usa el operador -> $afiliado = new persona($dni); echo $afiliado->apellidos; echo $afiliado->nombres; $afiliado->grabar();
CIBERTEC
33
3. Constructores y destructores
3.1.
Mtodo constructor
Este mtodo existe desde PHP5 y se utiliza para implementar un mtodo que se ejecutar por defecto al momento de instanciar el objeto. El constructor de una clase siempre se define como __construct(). class persona { function __construct() { } }
Nota: Los constructores padres no son llamados implcitamente si la clase hijo define un constructor. Para poder ejecutar el constructor de la clase padre, se debe hacer una llamada a parent::__construct() dentro del constructor de la clase hijo.
3.2.
Mtodo destructor
Este mtodo destruye el objeto instanciado, se ejecuta cuando todas las referencias a un objeto en particular sean removidas, cuando es explcitamente destruido o en cualquier otra circunstancia de finalizacin. class persona { function __destruct() { } }
Nota: El destructor es llamado durante la finalizacin del script, de tal manera que los headers ya han sido enviados.
CIBERTEC
34
4. Herencia
4.1.
Definicin
La herencia es una de las claves de la POO. Permite extender unas clases de otras. Lo cual implica: Utilizar mtodos y propiedades de las clases padre. Aadir nuevos mtodos. Aadir nuevas propiedades. Sobrescribir mtodos y propiedades de las clases padre.
4.2.
Implementacin
<? class A { public $propiedad1; public function metodo1() { } public function metodo2() { } } // fin de la clase A class B extends A // clase B hereda de la clase A { public function metodo3() { }
CIBERTEC
35
} // fin de la clase B $objA = new A(); $objB = new B(); $objA->metodo1(); $objB->metodo2(); //el objB hereda el metodo 2 de la clase A $objA->metodo3() ; //aqu se produce un ?>
4.3.
Reemplazos
Podemos hacerlo para asignar a una propiedad un valor diferente para la misma propiedad de su clase padre, tambin se puede usar para indicar una funcionalidad diferente del mismo mtodo en la clase hija.
4.4.
Al utilizar el operador final por delante de la declaracin de un mtodo, este no se podr reemplazar en ninguna clase hija. Si se antepone a la declaracin de una clase, se evitara que se creen subclases de una clase.
4.5.
Constantes de clases
PHP presenta el concepto de constante de clase, que se puede utilizar sin necesidad de crear una instancia de una clase, como se muestra a continuacin: <? class Math{ const pi = 3.14159; } echo valor de pi =. Match::pi ; ?>
CIBERTEC
36
5.1.
Modificador public
Es el nivel de acceso ms permisivo, sirve para indicar que el mtodo o atributo de la clase es accesible para visualizarlo y editarlo desde cualquier punto del script.
5.2.
Modificador private
Es el nivel de acceso ms restrictivo, sirve para indicar que ese mtodo o atributo solo se va poder acceder desde el propio objeto, nunca desde afuera.
5.3.
Modificar protected
Es el nivel de acceso medio, sirve para que el mtodo o atributo sea pblico dentro del cdigo de la propia clase y de cualquier clase que herede de esta. Los atributos y mtodos marcados como protected no son accesibles desde el exterior.
CIBERTEC
37
6.1.
Una clase abstracta es la que tiene mtodos abstractos. Los mtodos abstractos son los que estn declarados en una clase, pero no se ha definido en la clase el cdigo de esos mtodos. Cuando se hereda de una clase abstracta, todos los mtodos definidos como abstract en la definicin de la clase padre deben ser redefinidos en la clase hija; adicionalmente, estos mtodos deben ser definidos con la misma visibilidad (o con una menos restrictiva). Por ejemplo, si el mtodo abstracto est definido como protected, la implementacin de la funcin puede ser redefinida como protected o public, pero nunca como private. class MiClaseAbstracta { public function metodoFoo(){ // Implementacin del mtodo } abstract public function metodoBar(); }
CIBERTEC
38
7. Interfaces
7.1.
Definicin
Las interfaces de objetos permiten crear cdigo con el cual especificar qu mtodos deben ser implementados por una clase, sin tener que definir cmo estos mtodos son manipulados. Las interfaces son definidas utilizando la palabra clave interface, de la misma forma que con clases estndar, pero sin mtodos que tengan su contenido definido. Todos los mtodos declarados en una interfaz deben ser public, ya que sta es la naturaleza de una interfaz. interface iTemplate { public function setVariable($name, $var); public function getHtml($template); }
7.2.
Implementacin
<? class BadTemplate implements iTemplate { private $vars = array(); public function setVariable($name, $var) { $this->vars[$name] = $var; } } ?>
CIBERTEC
39
7.3.
Interfaces extensibles
Es posible generar herencia de las interfaces al igual que se hace con las clases, pero hay que tener cuidado ya que al implementar no podemos reemplazar los mtodos ya definidos. <? interface a { public function foo(); } interface b extends a { public function baz(Baz $baz); } class c implements b { public function foo() { } public function baz(Baz $baz) { } }
7.4. 7.4
Interface A
Mtodo m1
Mtodo m2
Interface C extends A,B Mtodo m3
class d implements C
CIBERTEC
40
7.5.
Para definir constantes se usa el operador const, el cual no podr redefinirse en la implementacin de la clase. <? interface a { const b = 'Interface constant'; } echo a::b; // Sin embargo esto no funcionar ya que no est permitido // sobrescribir constantes class b implements a { const b = 'Class constant'; } ?>
CIBERTEC