Sunteți pe pagina 1din 30

Curso de Programacin Web

en PHP
Fundacin Metropolitana del Ecuador
Profesor: MSc. Carlos M. Delgado
cmdelgador@gmail.com
Conferencia #4
Ttulo: Clases y Objetos en PHP 5.
Sumario: Definicin de clase
Instancia de la clase (Objeto)
Asignacin de Objetos
Extendiendo Objetos
Autocarga de Objetos
Constructor de la clase
Destructor de la clase
Visibilidad
Operador de resolucin (::)
Palabra reservada "Static"
Palabra reservada "Final"
Constantes de la Clase
Abstraccin de Objetos
Interfaces de Objetos
Sobrecarga de miembros
Sobrecarga de mtodos
Comparacin de Objetos
Type Hinting
Definicin simple de una clase
La palabra "class define una clase, seguida por un nombre
de clase, el cual puede ser cualquier nombre que no est
en la lista de palabras reserved en PHP. Seguida por un
par de llaves curvas, las cuales contienen la definicin de
los miembros de la clase y los mtodos.
<?php
class SimpleClass
{
// member declaration
public $var = 'a default value';

// method declaration
public function displayVar() {
echo $this->var;
}
}
?>
Instancia de la clase (Objeto)

Para crear una instancia de una clase, un nuevo objeto


debe ser creado y asignado a una variable.
Un objeto siempre ser asignado cuando se crea un
objeto nuevo a menos que el objeto tenga un
constructor definido que arroje una excepcin en caso
de error.

<?php
$instance = new SimpleClass()
?>
Asignacin de Objetos

Cuando se asigna una instancia de un objeto


previamente creado a una nueva variable, la nueva
variable accesar la misma instancia que la del objeto a
la que fue asignada.
Este comportamiento es el mismo cuando se pasan
instancias a una funcin.

Ver Ejemplo
Asignacin de Objetos
<?php
$assigned = $instance;
$reference =& $instance;

$instance->var = '$assigned will have this value';

$instance = null; // $instance and $reference become null

var_dump($instance);
var_dump($reference);
var_dump($assigned);
?>
Asignacin de Objetos

Resultado
NULL
NULL
object(SimpleClass)#1 (1)
{
["var"]=> string(30) "$assigned will have this value"
}
Asignacin de Objetos

Una nueva instancia de un objeto previamente creado


puede ser hecha clonndolo.
Una copia de un objeto es creada usando la palabra
'clone' (la cual llama el mtodo __clone() del objeto, si
es posible). Un mtodo __clone() de un objeto no puede
ser llamado directamente.

$copy_of_object = clone $object;

Ver Ejemplo
Extendiendo Objetos

Una clase puede heredar mtodos y miembros de otra


clase usando la palabra 'extends' en la declaracin.

<?php
class ExtendClass extends SimpleClass
{
//atributos y mtodos de la clase
}
?>

No es posible extender de mltiples clases, una clase


puede heredar solo de una clase base.
Extendiendo Objetos
Los mtodos de herencia y sus miembros pueden ser
evitados, redeclarndolos con el mismo nombre con el
que los defini la clase padre, a menos que la clase
padre haya definido un mtodo como final.
<?php
class ExtendClass extends SimpleClass
{
// Redefine the parent method
function displayVar()
{
echo "Extending class\n";
}
}
$extended = new ExtendClass();
$extended->displayVar();
?>
Autocarga de Objetos
Muchos desarrolladores que escriben aplicaciones
con programacin orientada a objetos crean un
archivo fuente PHP por cada definicin de clase.
<?php
function __autoload($class_name) {
require_once $class_name . '.php';
}

$obj = new MyClass1();


$obj2 = new MyClass2();
?>
Este ejemplo intenta cargar las clases MyClass1 y
MyClass2 de los archivos MyClass1.php y
MyClass2.php respectivamente.
Constructor de la Clase
PHP 5 permite a los desarrolladores declarar mtodos
constructores para las clases.
Las clases que tienen un mtodo constructor llaman a
este mtodo cada vez que se crea un nuevo objeto,
para cualquier inicializacin que el objeto puede
necesitar antes de ser usado.

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.
Ver Ejemplo
Destructor de la Clase
PHP 5 introduce un concepto de destructor similar a
aquellos de otros lenguajes de programacin orientada a
objetos, tal como C++. El mtodo destructor ser llamado
tan pronto como todas las referencias a un objeto en
particular sean removidas o cuando el objeto sea
explcitamente destruido.

Nota: El destructor es llamado durante la finalizacin del


script, de tal manera que los headers ya han sido
enviados.

Nota: Intentar arrojar una excepcin desde un destructor


produce un error fatal.
Ver Ejemplo
Visibilidad
La visibilidad de una propiedad o mtodo puede
ser definida al anteponerle a la declaracin con las
palabras reservadas: public, protected o private.

Los elementos declarados con Public pueden


ser accesados en todos lados.
Los Protected limitan el acceso a las clases
heredadas (y a la clase que define el elemento).
Los Private limitan la visibilidad solo a la clase
que lo defini.
Visibilidad

Visibilidad de los miembros


Los miembros de la clase debe estar definidos
con public, private o protected.
Ver Ejemplo

Visibilidad de los mtodos


Los mtodos de clase deben ser definidos con
public, private o protected. Los mtodos sin
ninguna declaracin son tomados como public.

Ver Ejemplo
Operador de resolucin (::)

El alcance del operador de resolucin (tambin


llamado Paamayim Nekudotayim) o en trminos
simples, dobles dos puntos, es un smbolo que
permite acceso a los miembros o mtodos estaticos,
constantes, y eliminados de una clase.

Ejemplo 1 Operador Resolucin (::)


Desde afuera de la definicin de la clase.
Operador de resolucin (::)

Dos palabras reservadas self y parent son usadas


para accesar los miembros o mtodos desde adentro
de la definicin de la clase.
Ejemplo 2 Operador Resolucin (::)
Desde dentro de la definicin de la clase

Cuando al extender una clase se elimina las


definiciones de un mtodo de la clase padre, PHP no
llamar el mtodo de la clase padre. Es opcional a la
clase extendida decidir si se deba llamar al mtodo
de la clase padre.
Ejemplo 3 Operador Resolucin (::)
Llamando al mtodo de la clase padre
Palabra reservada Static

Se pueden declarar los miembros de clases o


mtodos como estticos, lo cual los hace accesibles
desde afuera del contexto del objeto.

Un miembro o mtodo declarado como esttico no


puede ser accesado con una variable que es una
instancia del objeto y no puede ser redefinido en
una extensin de la clase.
Palabra reservada Static

La declaracin static debe estar despus de la


declaracin de visibilidad por compatibilidad con
PHP4.

A causa de que los mtodos estticos son


accesibles sin que se haya creado una instancia del
objeto, la pseudo variable $this no est disponible
dentro de los mtodos declarados como estticos.

Ver Ejemplo
Palabra reservada Final

PHP 5 introduce la palabra reservada 'final', la cual


prev que las clases hijo puedan sobreescribir un
mtodo, usando el prefijo 'final' en la definicin del
mtodo. Si la clase en s misma es definida como
'final' entonces no puede ser extendida.

#1. Ejemplo de mtodos con Final


#2. Ejemplo de clase con Final
Constantes de la Clase

Es posible definir valores constantes en cada


clase manteniendo el mismo valor y siendo
incambiable. Las constantes difieren de las
variables normales en que no se usa el smbolo
$ para declararlas o usarlas.
Como los miembros estticos, los valores
constantes no pueden ser accesados desde una
instancia de un objeto (usando
$object::constant).

Ver Ejemplo
Abstraccin de Objetos

PHP 5 introduce clases y mtodos abstractos. No es


permitido crear una instancia de una clase que ha
sido definida como abstracta.

Cualquier clase que contenga por lo menos un


mtodo abstracto debe tambin ser abstracta.

Los mtodos definidos como abstractos simplemente


declaran el mtodo, no pueden definir la
implementacin
Abstraccin de Objetos

Cuando se hereda desde una clase abstracta,


todos los mtodos marcados como abstractos en
la declaracin de la clase padre, deben de ser
definidos por la clase hijo; adicionalmente, estos
mtodos se deben definir con la misma o menor
visibilidad.

Ver Ejemplo
Interfaces de Objetos

Las interfaces de objetos permiten crear cdigo el


cual especifica mtodos que una clase debe
implementar, sin tener que definir como sern
manejados esos mtodos.

Las interfaces son definidas usando la palabra


reservada 'interface', de la misma manera que las
clases estndar, pero sin que cualquiera de los
mtodos tenga su contenido definido.

Todos los mtodos en una interface deben ser


pblicos, esto es la naturaleza de una interface.

Ver Ejemplo
Sobrecarga de miembros

void __set ( string name, mixed value )


mixed __get ( string name )
bool __isset ( string name )
void __unset ( string name )

Los miembros de la clase pueden ser sobrecargados


para ejecutar cdigo personalizado definido en la
clase al definir estos mtodos de nombre especial.
El parmetro $name usado es el nombre de la
variable que debe ser asignada (set) u obtenida
(get). El parmetro $value del mtodo __set()
especifica el valor que el objeto debe tener $value.
Ver Ejemplo
Sobrecarga de mtodos

mixed __call ( string name, array arguments )

Los mtodos de la clase pueden ser sobrecargados


para ejecutar cdigo personalizado definido en la
clase al definir este mtodo en particular.
El parmetro $value es el nombre de la funcin que
se pidi usar. Los argumentos que fueron pasados
en la funcin sern definidos como una matriz en el
parmetro $arguments.
El valor regresado del mtodo __call() ser
regresado a quien haya llamado al mtodo.
Ver Ejemplo
Comparacin de Objetos

Cuando se usa el operador de comparacin (==),


las variables del objeto son comparadas de una
forma simple, dgase: Dos instancias de objetos son
iguales si tienes los mismos atributos y valores, y
son instancias de la misma clase.

Por otro lado, cuando se usa el operador idntico


(===), las variables del objeto son idnticas solo si
refieren a la misma instancia de la misma clase.

Ver Ejemplo
Type Hinting

PHP 5 introduce Type Hinting.


Las funciones ahora son capaces de forzar que
los parmetros sean objetos especificando el
nombre de la clase en el prototipo de la funcin.
Revisar ejemplos en el Manual de PHP
Estudio Individual

Interaccin de Objetos. (foreach e Iterator-


simplemente implementando la interface PHP 5
IteratorAggregate- )

Patrones (Factory, Singleton )


Mtodos mgicos: ( __construct, __destruct, __call,
__get, __set, __isset, __unset, __sleep, __wakeup,
__toString, __clone y __autoload )
Atencin: PHP reserva todos los nombres de funciones
que empiecen con __ como mgicas. Es recomendado
que no use nombres de funciones con __ en PHP a
menos que desee alguna mgica funcionalidad
documentada.

S-ar putea să vă placă și