guia poo

17
GUÍA DE POO EN PHP SERGIO BARRANCO ZARCO JULIO CESAR SALAS López iTIC-91

Upload: sergio-barbar

Post on 12-Jun-2015

193 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Guia poo

GUÍA DE POO EN PHPSERGIO BARRANCO ZARCOJULIO CESAR SALAS LópeziTIC-91

Page 2: Guia poo

Elementos que conforman una clase Podemos declararnos elementos de tipo int, es lo que llamamos variables.Podemos declararnos elementos de la clase CL, en éste caso los llamaremos objetos o instancias de la clase CL.2. Pueden declararse elementos de ese tipoUna clase es un conjunto de datos y un conjunto de operaciones, que como hemos dicho, deben ir unidas.DatosOperacionesMiembros AtributosMétodos

Esto implica que podemos tener muchos objetos de una misma clase,igual que podíamos definir muchas variables de un tipo.Pero una clase no es tan simple como un tipo de datos

class [Nombre de la Clase] { [atributos] [métodos]}

Page 3: Guia poo

AtributosLos atributos son las caracterísiticas individuales que diferencian un objeto de otro y determinan su apariencia, estado u otras cualidades. Los atributos se guardan en variables denominadas de instancia, y cada objeto particular puede tener valores distintos para estas variables.Las variables de instancia también denominados miembros dato, son declaradas en la clase pero sus valores son fijados y cambiados en el objeto.Además de las variables de instancia hay variables de clase, las cuales se aplican a la clase y a todas sus instancias. Por ejemplo, el número de ruedas de un automóvil es el mismo cuatro, para todos los automóviles.

class Menu { private $enlaces=array(); private $titulos=array();

Page 4: Guia poo

MétodosLos métodos de una clase constituyen la lógica de la clase, es decir, contienen el código que manipula el estado del

objeto. Además constituyen el mecanismo utilizado para implementar los mensajes entre objetos.

Page 5: Guia poo

Referencia $thisEs utilizado en programación orientada a objetos y se define $this dentro de un objeto como un puntero al objeto en que está contenido. La palabra this está disponible para hacer referencia al objeto en el que se encuentra y puede ser utilizada en cualquier objeto

<?php class xero{ var $nick; function escribe($nombre){ echo "Tu anterior nick es:",$this->nick; $this->nick=$nombre; echo "<br>Tu actual nick es:",$this->nick,"<br>"; } } $variable=new xero(); $variable->escribe("Xero"); $variable->escribe("Nixo"); ?>

Page 6: Guia poo

Diferentes formas para el paso de argumentos a un metodoLos parámetros se pasan por valor

En PHP generalmente los parámetros se pasan por valor. Cuando se pasa un parámetro por valor a una función, los cambios que se hagan sobre esta variable solo tendrán efecto en el ámbito de la función, por lo que no se actualiza la variable que se pasó a la función.

<?php function porValor($param) { $param = "hola"; echo "<BR>" . $param; //imprime "hola" } $var = "no cambia"; porValor($var); echo "<BR>" . $var; //imprime "no cambia" ?>

Como se ve en el ejemplo, cuando invocamos la función por valor pasando $parametro1 como parámetro, a pesar de que cambiemos el valor del parámetro dentro de la función, la variable original no se ve afectada por ese cambio.

Page 7: Guia poo

Paso de parámetros por referencia

Los parámetros pasados por referencia se comportan en contraposición al paso de parámetros por valor. En este caso, el cambio del valor de un parámetro dentro de una función sí afecta al valor de la variable original.

Podemos pasar los parámetros por referencia si, en la declaración de la función, colocamos un "&" antes del parámetro.

<?phpfunction porReferencia(&$cadena){$cadena = 'Si cambia';}$var = 'Esto es una cadena';porReferencia ($var);echo $var; // Imprime 'Si cambia'?>

Page 8: Guia poo

Parámetros por defecto

Cuando se le define un valor a un parámetro al momento de declarar una función, este parámetro tomará ese valor por defecto mientras no se envíe otro al momento de invocar la función. Los valores por defecto sirven para que los parámetros contengan un dato predefinido. Se definen asignando un dato al parámetro al declararlo en la función.

Para la definición de la función anterior, $parametro1 tiene como valor por defecto "pepe", mientras que $parametro2 tiene 3 como valor por defecto.

Para la definición de la función anterior, $parametro1 tiene como valor por defecto "pepe", mientras que $parametro2 tiene 3 como valor por defecto.

Si llamamos a la función sin indicar valores a los parámetros, éstos tomarán los valores asignados por defecto:• pordefecto () // $parametro1 vale "pepe" y $parametro2 vale 3 Si llamamos a la función indicando un valor, éste será tenido en cuenta para el primer parámetro.• pordefecto ("hola") // $parametro1 vale "hola" y $parametro2 vale 3 Atención, estamos obligados a declarar todos los parámetros con valores por defecto al final.

Page 9: Guia poo

Devolver desde un método

Los valores son devueltos usando la sentencia opcional return. Se puede devolver cualquier tipo, incluidos arrays y objetos. Esto causa que la función finalice su ejecución inmediatamente y pase el control de nuevo a la línea desde la que fue llamada. Véase return para más información.

Ejemplo #1 Uso de return

<?phpfunction cuadrado($núm){ return $núm * $núm;}echo cuadrado(4); // imprime '16'.?>

Page 10: Guia poo

Constructor

void __construct ([ mixed $args [, $... ]] )Un constructor por defecto es un constructor sin parámetros que no hace nada. Sin embargo será invocado cada vez que se construya un objeto sin especificar ningún argumento, en cuyo caso el objeto será iniciado con los valores predeterminados por el sistema (los atributos numéricos a ceros, los alfanuméricos a nulos, y las referencias a objetos a null).

PHP 5 permite a los desarrolladores declarar métodos constructores para las clases. Aquellas que tengan un método constructor lo invocarán en cada nuevo objeto creado, lo que lo hace idóneo para cualquier inicialización que el objeto pueda necesitar antes de ser usado.

<?phpfunction cuadrado($núm){ return $núm * $núm;}echo cuadrado(4); // imprime '16'.?>

Page 11: Guia poo

Herencia de Objetos

 La herencia (a la que habitualmente se denomina subclases) proviene del hecho de que la subclase (la nueva clase creada) contiene las atributos y métodos de la clase primaria. La principal ventaja de la herencia es la capacidad para definir atributos y métodos nuevos para la subclase, que luego se aplican a los atributos y métodos heredados. La herencia es un principio de programación bien establecido y PHP hace uso de él en su modelado de objetos. Este principio afectará la manera en que muchas clases y objetos se relacionan unas con otras.

Page 12: Guia poo

Polimorfismo

El polimorfismo implica que, teniendo varias clases con métodos con el mismo nombre, otra función podrá definir según el objeto pasado como parámetro qué método de qué clase se utilizará. Nada mejor que un ejemplo para entenderlo:

Pongamos que tenemos 2 clases (perro y persona) que implementan la función andar

Page 13: Guia poo

Public

Los elementos declarados como Public son accesibles tanto desde fuera como desde dentro de la clase.<?php class Vehiculo { public $marca; function __construct($marca) { $this->marca=$marca; } } $micoche = new Vehiculo("Toyota"); echo $micoche->marca;?>

El atributo marca es público y por lo tanto es visible desde fuera de la clase.

Page 14: Guia poo

PrivateLos elementos declarados como Private son accesibles sólo desde la misma clase donde fueron definidos.<?php class Vehiculo { private $marca; function __construct($marca) { $this->marca=$marca; } } $micoche = new Vehiculo("Toyota"); echo $micoche->marca; ?>Si ejecutamos el código obtendremos el siguiente error:

Fatal error: Cannot access private property Vehiculo::$marca

El atributo marca no es visible fuera de la clase en la que se definió.

Page 15: Guia poo

ProtectedLos elementos declarados como Protected son accesibles desde la misma clase donde fueron definidos y en sus subclases.

<?php class Vehiculo { protected $marca; function __construct($marca) { $this->marca=$marca; } } class Coche extends Vehiculo { function __construct($marca) { $this->marca=$marca; } } $micoche = new coche("Toyota"); echo $micoche->marca; ?>

Si ejecutamos el código obtendremos el siguiente error

Fatal error: Cannot access protected property CocheProducido por la línea que contiene este código:

echo $micoche->marca;

Este error sucede por utilizar el atributo marca fuera de la clase Vehículo y quedar así fuera de su visibilidad. En cambio el uso de este atributo en la clase Coche y Vehículo es correcto.

Los métodos o atributos sin ninguna de las declaraciones (public, private o protected) por defecto serán public.

Page 16: Guia poo

Abstracción de clases

PHP 5 introduce clases y métodos abstractos. Las clases definidas como abstract no se pueden instanciar y cualquier clase que contiene al menos un método abstracto debe ser definida como abstract. Los métodos definidos como abstractos simplemente declaran la estructura del método, pero no pueden definir la implementación.

Cuando se hereda de una clase abstracta, todos los métodos definidos como abstract en la definición de la clase parent deben ser redefinidos en la clase child; adicionalmente, estos métodos deben ser definidos con la misma visibilidad (o con una menos restrictiva). Por ejemplo, si el método abstracto está definido como protected, la implementación de la función puede ser redefinida como protected o public, pero nunca como private. Por otra parte, las estructuras de los métodos tienen que coincidir; es decir, la implicación de tipos y el número de argumentos requeridos deben ser los mismos. Por ejemplo, si la clase derivada define un parámetro opcional, mientras que el método abstracto no, no habría conflicto con la estructura del método. Esto también aplica a los constructores de PHP 5.4. Antes de PHP 5.4 las estructuras del constructor podían ser diferentes.

Page 17: Guia poo

Interfaces de objetos

Las interfaces de objetos permiten crear código con el cual especificamos qué métodos deben ser implementados por una clase, sin tener que definir cómo estos métodos son manipulados.

Las interfaces son definidas utilizando la palabra clave interface, de la misma forma que con clases estándar, pero sin métodos que tengan su contenido definido.

Todos los métodos declarados en una interfaz deben ser public, ya que ésta es la naturaleza de una interfaz.

Interfaces con constantes<?phpinterface a{ const b = 'Interface constant';}

// Imprime: Interface constantecho a::b;// Sin embargo ésto no funcionará ya que no está permitido// sobrescribir constantesclass b implements a{ const b = 'Class constant';}?>