13
Guía de POO con PhP Arnold Enriquez Jaramillo Oscar Camacho Sánchez ITIC-91

Guía de poo con php

Embed Size (px)

DESCRIPTION

Guía básica de PHP orientado a objetos

Citation preview

Page 1: Guía de poo con php

Guía de POO con PhP

Arnold Enriquez Jaramillo

Oscar Camacho Sánchez

ITIC-91

Page 2: Guía de poo con php

Contenido Atributos ................................................................................................................................................................ 3

Métodos .................................................................................................................................................................. 3

Referencia THIS .................................................................................................................................................. 4

Paso de argumentos a un método ............................................................................................................. 4

Devolver un valor desde un método ........................................................................................................ 4

Constructor ........................................................................................................................................................... 5

Herencia ................................................................................................................................................................. 6

Polimorfismo ....................................................................................................................................................... 8

Diferencia entre Public, Private, Protected ........................................................................................ 10

Public ............................................................................................................................................................... 10

Private: ........................................................................................................................................................... 11

Protected ....................................................................................................................................................... 11

Clase Abstracta ................................................................................................................................................ 12

Definición de Interfaz ................................................................................................................................... 13

Page 3: Guía de poo con php

Definición: Programación Orientada a Objetos: Es cuando planteamos clases y definimos objetos de las mismas.

Atributos Los atributos son las características, cualidades, propiedades distintivas de cada clase. Contienen información sobre el objeto. Determinan la apariencia, estado y demás particularidades de la clase. Varios objetos de una misma clase tendrán los mismos atributos pero con valores diferentes. <?php class Imagen { var $src; // Estos són los atributos var $border; // de los objetos asociados // Esta funcion es el constructor function Imagen($src,$border) { $this->src=$src; $this->border=$border; } } // Creamos un objeto imagen

$logo = new Imagen("logo.gif",3); ?>

Métodos Los métodos son como las funciones en los lenguajes estructurados, pero están definidos dentro de una clase y operan sobre los atributos de dicha clase. Los métodos también son llamados las responsabilidades de la clase. Para encontrar las responsabilidades de una clase hay que preguntarse qué puede hacer la clase. El objetivo de un método es ejecutar las actividades que tiene encomendada la clase a la cual pertenece. Los atributos de un objeto se modifican mediante llamadas a sus métodos. <?php class Imagen { var $src; var $border; function Imagen($src,$border) { $this->src=$src; $this->border=$border; } // Esta funcion es un método de Imagen function Imprimir() {

echo "<img src=\""; echo $this->src;

Page 4: Guía de poo con php

echo "\" border=\""; echo $this->border;

echo "\">"; } }

$logo = new Imagen("logo.gif",3); // Llamamos el nuevo método $logo->Imprimir(); ?>

Referencia THIS Se utiliza $this para hacer referencia al objeto (instancia) actual.

Paso de argumentos a un método Los parámetros son los datos que reciben las funciones y que utilizan para realizar las operaciones de la función. Una función puede recibir cualquier número de parámetros, incluso ninguno. A la hora de definir la función, en la cabecera, se definen los parámetros que va a recibir. function f1 ($parametro1, $parámetro2)

Así definimos una función llamada f1 que recibe dos parámetros. Como se puede observar, no se tiene que definir el tipo de datos de cada parámetro. Los parámetros tienen validez durante la ejecución de la función, es decir, tienen un ámbito local a la función donde se están recibiendo. Cuando la función se termina, los parámetros dejan de existir.

Devolver un valor desde un método El paso de parámetros en PHP se realiza por valor. "Por valor" es una manera típica de pasar parámetros en funciones, quiere decir que el cambio de un dato de un parámetro no actualiza el dato de la variable que se pasó a la función. Por ejemplo, cuando invocamos una función pasando una variable 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. Puede que se vea mejor con un ejemplo:

function porvalor ($parametro1){

$parametro1="hola";

Page 5: Guía de poo con php

echo "<br>" . $parametro1; //imprime "hola"

}

$mivariable = "esto no cambia";

porvalor ($mivariable);

echo "<br>" . $mivariable; //imprime "esto no cambia”

Esto dará como resultado:

hola

esto no cambia

Constructor El constructor es un método especial de una clase. El objetivo fundamental del constructor es inicializar los atributos del objeto que creamos. Básicamente el constructor remplaza al método inicializar que habíamos hecho en el concepto anterior. Las ventajas de implementar un constructor en lugar del método inicializar son:

1. El constructor es el primer método que se ejecuta cuando se crea un objeto. 2. El constructor se llama automáticamente. Es decir es imposible de olvidarse

llamarlo ya que se llamará automáticamente. 3. Quien utiliza POO (Programación Orientada a Objetos) conoce el objetivo de

este método. Otras características de los constructores son:

El constructor se ejecuta inmediatamente luego de crear un objeto y no puede ser llamado nuevamente.

Un constructor no puede retornar dato. Un constructor puede recibir parámetros que se utilizan normalmente para

inicializar atributos. El constructor es un método opcional, de todos modos es muy común

definirlo.

<html>

<head>

<title>Pruebas</title>

</head>

<body>

<?php class CabeceraPagina

{

Page 6: Guía de poo con php

private $titulo;

private $ubicacion;

public function __construct($tit,$ubi)

{

$this->titulo=$tit;

$this->ubicacion=$ubi;

}

public function graficar()

{

echo '<div style="font-size:40px;text-align:'.$this-

>ubicacion.'">';

echo $this->titulo;

echo '</div>';

}

}

$cabecera=new CabeceraPagina('El blog del

programador','center');

$cabecera->graficar();

?>

</body>

</html>

Herencia La herencia es específica de la programación orientada a objetos, donde una clase nueva se crea a partir de una clase existente. La herencia (a la que habitualmente se denomina subclases) proviene del hecho de que la subclase (la nueva clase creada) contiene los 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. Esta particularidad permite crear una estructura jerárquica de clases cada vez más especializada. La gran ventaja es que uno ya no debe comenzar desde cero cuando desea especializar una clase existente. Como resultado, se pueden adquirir bibliotecas de clases que ofrecen una base que puede especializarse a voluntad (la compañía que vende estas clases tiende a proteger las datos miembro usando la encapsulación).

1. <?php

2. /*

Page 7: Guía de poo con php

3. Tomamos como base el ejemplo realizado en el capitulo anterior, relacionado con la

conexion a una base de datos MySql.

4. */

5.

6.

7. /* Creamos una clase base que nos sirva para controlar la conexion y la ejecucion de

consultas */

8. class ClassBD{

9. private $user = "";

10. privare $bd = "";

11. private $password = "";

12. private $host = "";

13.

14. /*

15. Declaramos el metodo "conectar" y "desconectar" que sirve para realizar

16. la conexion a la bd, lo declaramos como private para que sea ejecutado

17. unicamente desde la propia clase

18. */

19. private function conectar()

20. {

21. if (@mysql_connect($this->host,$this->user,$this->password ) )

22. {

23. mysql_select_db( $this->bd );

24. }

25. }

26. private function desconectar()

27. {

28. mysql_close();

29. }

30.

31. /*

32. Declaramos la funcion "execQuery" que nos permitira ejecutar

33. la consulta que le pasemos como parametro y nos devolvera

34. un array con los datos correspondientes.

35. */

36. protected function execQuery($sql)

Page 8: Guía de poo con php

37. {

38. $datos = array();

39. $this->conexion();

40. $recordset= mysql_query($sql);

41. if (@mysql_num_rows($recordset)>0)

42. while($tupla = mysql_fetch_assoc($recordset))

43. {

44. $temp[]=$tupla;

45. }

46. $this->disconnect();

47. return $datos;

48. }

1. }

2. ?>

Polimorfismo

En programación orientada a objetos se denomina polimorfismo a la capacidad que tienen los objetos de una clase de responder al mismo mensaje o evento en función de los parámetros utilizados durante su invocación. Un objeto polimórfico es una entidad que puede contener valores de diferentes tipos durante la ejecución del programa.

1. <?php

2. /*

3. Empezaremos definiendo la jerarquia de clases

4. */

5. class classPoligono

6. {

Page 9: Guía de poo con php

7. function calculo()

8. {

9. echo 'El area depende del tipo de poligono';

10. }

11. }

12.

13. class classCuadrado extends classPoligono

14. {

15. function calculo()

16. {

17. echo 'area de un cuadrado : a=l*l<br>';

18. }

19. }

20.

21. class classRectangulo extends classPoligono

22. {

23. function calculo()

24. {

25. echo 'area de un rectangulo : a=b*h<br>';

26. }

27. }

28.

29. class classTriangulo extends classPoligono

30. {

31. function calculo()

32. {

33. echo 'area de un triangulo : a=(b*h)/2<br>';

34. }

35. }

36. /* fin definicion de la jerarquia de clases */

37.

38. /*

39. definicion de la funcion encargada de realizar las llamada

40. polimorfica al metodo "calculo"

41. A destacar que en la definicion de la funcion definimos el tipo

42. parametro que pasamos por referencia, esto no es obligatorio

Page 10: Guía de poo con php

43. en PHP, pero nos ayuda a entender el concepto y asi poder aplicarlo

44. en otros lenguajes mas estrictos.

45. */

46. function area(classPoligono $obj)

47. {

48. $obj->calculo();

49. }

50.

51. /*

52. Creamos los objetos necesarios

53. */

54. $cuadrado = new Cuadrado;

55. $rectangulo = new Rectangulo;

56. $triangulo = new Triangulo;

57.

58. /*

59. Ejecutamos la funcion encargada

60. de realizar la llamada polimorfica

61. */

62. area($cuadrado);

63. area($rectangulo);

64. area($triangulo);

65. ?>

Diferencia entre Public, Private, Protected

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;

Page 11: Guía de poo con php

}

}

$micoche = new Vehiculo("Toyota"); echo $micoche->marca; ?>

Private:

Los 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ó.

Protected

Los 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)

{

Page 12: Guía de poo con php

$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 Coche

Producido 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.

Clase Abstracta Una clase abstracta es la que tiene métodos abstractos. Los métodos abstractos son los que están declarados en una clase, pero no se ha definido en la clase el código de esos métodos.

Para declarar clases y métodos abstractos se utiliza la siguiente sintaxis.

abstract class nombre_clase{

//propiedades

public x;

Page 13: Guía de poo con php

private y;

//métodos

public function __construct(){

}

public abstract function nombre_metodo();

}

Nos fijamos que se utiliza la palabra clave "abstract" para definir las clases o métodos abstractos. Además, los métodos abstractos no llevan ningún código asociado, ni siquiera las llaves para abrir y cerrar el método.

Definición de Interfaz Una interfaz es un conjunto de métodos abstractos y de constantes cuya funcionalidad es la de determinar el funcionamiento de una clase, es decir, funciona como un molde o como una plantilla. Al ser sus métodos abstractos estos no tiene funcionalidad alguna, sólo se definen su tipo, argumento y tipo de retorno.