Poo PHP
Poo PHP
Poo PHP
programación orientada a
objeto con PHP
Maximiza la potencia de PHP.
Introducción a la programación orientada a objeto con PHP
Maximiza la potencia de PHP.
Capítulo 1: Introducción a la programación orientada a objetos en PHP
Objetivo: El alumno aprenderá los principios y fundamentos de la programación orientada a
objetos en cualquier lenguaje
Introducción:
En esta sección veremos los siguientes temas:
1. Introducción a los conceptos de POO.
2. Crear una clase
3. Crear un método
4. Crear una instancia
5. Crear propiedades
6. Crear un constructor
7. Crear una función destructora
Introducción a la programación orientada a objeto con PHP
1 <?php
2 class Gatos{
3
4 }
5 /*
6 $clases = get_declared_classes();
7 foreach ($clases as $clase) {
8 print $clase."<br>";
9 }
10 */
11 if (class_exists("Gatos")) {
12 print "La clase Gatos si existe"."<br>";
13 } else {
14 print "La clase Gatos NO existe"."<br>";
15 }
16
17
18 ?>
Listado 1.2.1. crearClase.php
1 <?php
2 class Gato{
3 function maullar(){
4 print "El gato dice miau miau"."<br>";
5 }
6 function ronronear(){
7 print "El gato ronronea"."<br>";
8 }
9 }
10
11 $metodos = get_class_methods("Gato");
12 foreach ($metodos as $metodo) {
13 print $metodo."<br>";
14 }
15
16 if (method_exists("Gato", "maullar")) {
17 print "Los gatos pueden maullar"."<br>";
18 } else {
19 print "Los gatos NO pueden maullar"."<br>";
20 }
21 ?>
Listado 1.3.1. clasesMetodos.php
1 <?php
2 class Gato{
3 function maullar(){
4 return "miau, miau";
5 }
6 }
7
8 //Creamos las instancias
9 $cucho = new Gato();
10 $benito = new Gato();
11 $espanto = new Gato();
12
13 //detectar la clase de una instancia / objeto
14 print "Espanto pertenece a la clase ".get_class($espanto)."<br>";
15
16 //Verificar que un objeto pertenezca a una clase
17 print "Matute ";
18 if (is_a($matute,"Gato")) {
19 print "Si es un gato"."<br>";
20 } else {
21 print "No es un gato"."<br>";
22 }
23
24 //Llamar a un metodo
25 print "Cucho dice ".$cucho->maullar()."<br>";
26 print "Benito dice ".$benito->maullar()."<br>";
27 print "Espanto dice ".$espanto->maullar()."<br>";
28 ?>
Listado 1.4.1. claseInstancia.php
1 <?php
2 class Gato{
3 var $nombre;
4 var $colorPelo;
5 var $corbata = "SI";
6
7 function maullar(){
8 return "miau, miau";
9 }
10
11 function tieneCorbata(){
return $this->nombre." ".$this->corbata." tiene corbata y su color de pelo es
12
".$this->colorPelo."<br>";
13 }
14 }
15 //instancias
16 $cucho = new Gato();
17
18 //Poblar las propiedades
19 $cucho->nombre = "Cucho";
20 $cucho->colorPelo = "rosa";
21 $cucho->corbata = "NO";
22
23 print $cucho->nombre." dice ".$cucho->maullar()."<br>";
24 print $cucho->tieneCorbata();
25 ?>
Listado 1.5.1. clasesPropiedades.php
1 <?php
2 class Gato{
3 var $nombre;
4 var $colorPelo;
5 var $corbata = "SI";
6
7 function __construct($nombre="", $pelo="negro"){
8 $this->nombre = $nombre;
9 $this->colorPelo = $pelo;
10 }
11
12 function maullar(){
13 return "miau, miau";
14 }
15
16 function tieneCorbata(){
return $this->nombre." ".$this->corbata." tiene corbata y su color de pelo es
17
".$this->colorPelo."<br>";
18 }
19
20 function saludo(){
21 $cadena = "Hola, me llamo ".$this->nombre." y mi color de pelo es ";
22 $cadena .= $this->colorPelo;
23 return $cadena;
24 }
25 }
26 //instancias
27 $cucho = new Gato("Cucho","rosa");
28
29 print $cucho->nombre." dice ".$cucho->maullar()."<br>";
30 print $cucho->tieneCorbata();
31 print $cucho->saludo();
32 ?>
Listado 1.6.1. clasesConstructor.php
1 <?php
2 class Gato{
3 var $nombre;
4 var $colorPelo;
5 var $corbata = "SI";
6
7 function __construct($nombre="", $pelo="negro"){
8 $this->nombre = $nombre;
9 $this->colorPelo = $pelo;
10 }
11
12 function __destruct(){
13 print $this->nombre." dice: 'Adios, mundo cruel"."<br>";
14 }
15
16 function maullar(){
17 return "miau, miau";
18 }
19
20 function tieneCorbata(){
return $this->nombre." ".$this->corbata." tiene corbata y su color de pelo es
21
".$this->colorPelo."<br>";
22 }
23
24 function saludo(){
25 $cadena = "Hola, me llamo ".$this->nombre." y mi color de pelo es ";
26 $cadena .= $this->colorPelo;
27 return $cadena;
28 }
29 }
30 //instancias
31 $cucho = new Gato("Cucho","rosa");
32
33 print $cucho->nombre." dice ".$cucho->maullar()."<br>";
34 print $cucho->tieneCorbata();
35 print $cucho->saludo()."<br>";
36
37 unset($cucho);
38 ?>
Listado 1.7.1. clasesDestructor.php
Introducción:
En esta sección veremos los siguientes temas:
1. Principios de herencia en PHP
2. Modificadores de acceso
3. Crear setters y getters
4. Métodos mágicos _get y _set
5. Métodos y propiedades estáticas
6. Sobreescribir un método en una clase
7. El operador de resolución de alcance (self, parent)
8. Clonar objetos en PHP
Introducción a la programación orientada a objeto con PHP
1 <?php
2 class Gato{
3 var $nombre;
4 var $colorPelo;
5 var $corbata = "SI";
6
7 function __construct($nombre="", $pelo="negro"){
8 $this->nombre = $nombre;
9 $this->colorPelo = $pelo;
10 }
11
12 function __destruct(){
13 print $this->nombre." dice: 'Adios, mundo cruel"."<br>";
14 }
15
16 function maullar(){
17 return "miau, miau";
18 }
19
20 function tieneCorbata(){
return $this->nombre." ".$this->corbata." tiene corbata y su color de pelo es
21
".$this->colorPelo."<br>";
22 }
23
24 function saludo(){
25 $cadena = "Hola, me llamo ".$this->nombre." y mi color de pelo es ";
26 $cadena .= $this->colorPelo;
27 return $cadena;
28 }
29 }
30
31 ?>
Listado 2.1.1. claseGato.php
1 <?php
2 class Gato{
3 var $nombre;
4 var $colorPelo;
5 var $corbata = "SI";
6
1 <?php
2 class Gato{
3 var $nombre;
4 var $colorPelo;
5 var $corbata = "SI";
6
7 function __construct($nombre="", $pelo="negro"){
8 $this->nombre = $nombre;
9 $this->colorPelo = $pelo;
10 }
11
12 function __destruct(){
13 print $this->nombre." dice: 'Adios, mundo cruel"."<br>";
14 }
15
16 function maullar(){
17 return "miau, miau";
18 }
19
20 function tieneCorbata(){
return $this->nombre." ".$this->corbata." tiene corbata y su color de pelo es
21
".$this->colorPelo."<br>";
22 }
23
24 function saludo(){
25 $cadena = "Hola, me llamo ".$this->nombre." y mi color de pelo es ";
26 $cadena .= $this->colorPelo;
27 return $cadena;
28 }
29 }
30
31 ?>
Listado 2.2.1. claseGato.php
1 <?php
2 class Gato{
3 protected $nombre;
4 private $colorPelo;
1 <?php
2 class Gato{
3 protected $nombre;
4 private $colorPelo;
5 private $corbata = "SI";
6
7 function __construct($nombre="", $pelo="negro"){
8 $this->nombre = $nombre;
9 $this->colorPelo = $pelo;
10 }
11
12 function __destruct(){
13 print $this->nombre." dice: 'Adios, mundo cruel"."<br>";
14 }
15
16 function setCorbata($c="SI"){
17 if($c!="SI"){
18 $corbata = "NO";
19 }
20 $this->corbata = $c;
21 }
22
23 function getCorbata(){
24 return $this->corbata;
25 }
26
27 function maullar(){
28 return "miau, miau";
29 }
30
31 function tieneCorbata(){
return $this->nombre." ".$this->corbata." tiene corbata y su color de pelo es
32
".$this->colorPelo."<br>";
33 }
34
35 function saludo(){
36 $cadena = "Hola, me llamo ".$this->nombre." y mi color de pelo es ";
37 $cadena .= $this->colorPelo;
38 return $cadena;
39 }
40 }
41
42 class GatoVolador extends Gato{
43 function nombreGatoVolador(){
1 <?php
2 class Gato{
3 protected $nombre;
4 private $colorPelo;
5 private $corbata = "SI";
6
7 function __construct($nombre="", $pelo="negro"){
8 $this->nombre = $nombre;
9 $this->colorPelo = $pelo;
10 }
11
12 function __destruct(){
13 print $this->nombre." dice: 'Adios, mundo cruel"."<br>";
14 }
15
16 function __set($name, $valor){
17 print "La propiedad ".$name." se actualizo a ".$valor."<br>";
18 if($name=="corbata"){
19 if($valor!="SI") $valor = "NO";
20 }
21 $this->$name = $valor;
22 }
23
24 function __get($name){
25 return $this->$name;
26 }
27
28 function setCorbata($c="SI"){
29 if($c!="SI"){
30 $corbata = "NO";
31 }
32 $this->corbata = $c;
33 }
34
35 function getCorbata(){
36 return $this->corbata;
37 }
38
39 function maullar(){
40 return "miau, miau";
41 }
1 <?php
2 class Gato{
3 public static $claveSecreta = "12345";
4 protected $nombre;
5 private $colorPelo;
6 private $corbata = "SI";
7
8 function __construct($nombre="", $pelo="negro"){
9 $this->nombre = $nombre;
10 $this->colorPelo = $pelo;
11 }
12
13 function __destruct(){
14 print $this->nombre." dice: 'Adios, mundo cruel"."<br>";
15 }
16
17 function __set($name, $valor){
18 print "La propiedad ".$name." se actualizo a ".$valor."<br>";
19 if($name=="corbata"){
20 if($valor!="SI") $valor = "NO";
21 }
22 $this->$name = $valor;
23 }
24
25 function __get($name){
26 return $this->$name;
27 }
28
29 public static function mensajeSecreto(){
30 return "Haz el bien, sin mirar a quien";
31 }
32
33 function setCorbata($c="SI"){
34 if($c!="SI"){
35 $corbata = "NO";
36 }
37 $this->corbata = $c;
38 }
39
40 function getCorbata(){
41 return $this->corbata;
1 <?php
2 class Gato{
3 protected $nombre;
4 private $colorPelo;
5 private $corbata = "SI";
6
7 function __construct($nombre="", $pelo="negro"){
8 $this->nombre = $nombre;
9 $this->colorPelo = $pelo;
10 }
11
12 function __destruct(){
13 //print $this->nombre." dice: 'Adios, mundo cruel"."<br>";
14 }
15
16 function __set($name, $valor){
17 print "La propiedad ".$name." se actualizo a ".$valor."<br>";
18 if($name=="corbata"){
19 if($valor!="SI") $valor = "NO";
20 }
21 $this->$name = $valor;
22 }
23
24 function __get($name){
25 return $this->$name;
26 }
27
28 function setCorbata($c="SI"){
29 if($c!="SI"){
30 $corbata = "NO";
31 }
32 $this->corbata = $c;
33 }
34
35 function getCorbata(){
36 return $this->corbata;
37 }
38
39 function maullar(){
40 return "miau, miau";
41 }
42
43 function tieneCorbata(){
1 <?php
2 class Gato{
3 const EDAD = 18;
4 static $claveSecreta = "12345";
5 protected $nombre;
6 private $colorPelo;
7 private $corbata = "SI";
8
9 function __construct($nombre="", $pelo="negro"){
10 $this->nombre = $nombre;
11 $this->colorPelo = $pelo;
12 }
13
14 function __destruct(){
15 //print $this->nombre." dice: 'Adios, mundo cruel"."<br>";
16 }
17
18 function __set($name, $valor){
19 print "La propiedad ".$name." se actualizo a ".$valor."<br>";
20 if($name=="corbata"){
21 if($valor!="SI") $valor = "NO";
22 }
23 $this->$name = $valor;
24 }
25
26 function __get($name){
27 return $this->$name;
28 }
29
30 function setCorbata($c="SI"){
31 if($c!="SI"){
32 $corbata = "NO";
33 }
34 $this->corbata = $c;
35 }
36
37 function getCorbata(){
38 return $this->corbata;
39 }
40
41 function maullar(){
1 <?php
2 class Gato{
3 const EDAD = 18;
4 static $claveSecreta = "12345";
5 protected $nombre;
6 private $colorPelo;
7 private $corbata = "SI";
8
9 function __construct($nombre="", $pelo="negro"){
10 $this->nombre = $nombre;
11 $this->colorPelo = $pelo;
12 }
13
14 function __destruct(){
15 //print $this->nombre." dice: 'Adios, mundo cruel"."<br>";
16 }
17
18 function setCorbata($c="SI"){
19 if($c!="SI"){
20 $corbata = "NO";
21 }
22 $this->corbata = $c;
23 }
24
25 function setNombre($n="gato"){
26 $this->nombre = $n;
27 }
28
29 function getCorbata(){
30 return $this->corbata;
31 }
32
33 function maullar(){
34 //despedida(); error
35 //$this->despedida(); ok
36 //self::despedida(); ok
37 return "miau, miau ".self::$claveSecreta;
38 }
39
40 static function despedida(){
41 print "'Adios, mundo cruel'"."<br>";
42 }
43
44 function tieneCorbata(){
Introducción:
Los temas a tratar en esta sección son:
● Constantes en clases
● Archivos externos
● Autocargas
● Clases abstractas
● Interfaces
● Iteración de objetos
● Evitar la sobreescritura
● Comparación de instancias
● Clases anónimas
● Rasgos (Traits)
Introducción a la programación orientada a objeto con PHP
1 <?php
2 class MiClase
3 {
4 const CONSTANTE = 'valor constante';
5
6 function mostrarConstante() {
7 echo self::CONSTANTE . "\n";
8 }
9 }
10
11 echo MiClase::CONSTANTE . "\n";
12
13 $nombreclase = "MiClase";
14 echo $nombreclase::CONSTANTE . "\n"; // A partir de PHP 5.3.0
15
16 $clase = new MiClase();
17 $clase->mostrarConstante();
18
19 echo $clase::CONSTANTE."\n"; // A partir de PHP 5.3.0
20 ?>
Listado 3.1.1. constantes.php
1 <?php
2 class Gato{
3 const EDAD = 18;
4 //5.3.0 Nowdow heredoc
5 const PESO = <<<'EOT'
6 20
7 EOT;
8 //5.6.0
9 const UNO = 1;
10 const DOS = self::UNO + self::UNO;
11 const TRES = self::UNO + self::DOS;
12 const SUMA = "Las vidas de los gatos son ".self::TRES * 3;
13
14 function edadGatuna(){
15 return self::EDAD;
16 }
17 }
18
1 <?php
2 class foo {
3 // A partir de PHP 5.3.0
4 const BAR = <<<'EOT'
5 bar
6 EOT;
7 // A partir de PHP 5.3.0
8 const BAZ = <<<EOT
9 baz
10 EOT;
11 }
12 ?>
Listado 3.1.3. constantesHeredoc.php
archivos/php-oop/php-oop-030210-OtrosArchivosExternos/clase/Gato.php no
existearchivos/php-oop/php-oop-030210-OtrosArchivosExternos/clase/GatoVolador.php no existe
1 <?php
2 require_once "clases/Gato.php";
3 require_once "clases/GatoVolador.php";
4
5 $cucho = new Gato("Cucho", "rosa");
6 $benito = new GatoVolador("Benito","azul");
7
8 //Copiar por valor
9 $a = 10;
10 $b = $a;
11
12 //Copiado por referencia
13 $panza = clone $cucho;
14 $panza->setCorbata("SI");
15 $cucho->setCorbata("NO");
16 print $panza->tieneCorbata();
17 print $cucho->tieneCorbata();
18 $panza->setNombre("Panza");
19 print $panza->tieneCorbata();
20 print $cucho->tieneCorbata();
21 ?>
Listado 3.2.1. includeRequire.php
3.3. Autocargas
● A partir de la versión 5.0.0 de PHP podemos hacer autocargas para evitar las sentencias de llamada include y
require.
● Con la función spl_autoload_register() podemos autocargar las clases que llamemos en nuestro programa.
● La función spl_autoload() se considera obsoleta.
spl_autoload_register(function ($nombre_clase) {
include $nombre_clase . '.php';
});
archivos/php-oop/php-oop-030310-OtrosAutoload/OtrosAutoload.php no existe
1 <?php
2 class Gato{
3 const EDAD = 18;
4 static $claveSecreta = "12345";
5 protected $nombre;
6 private $colorPelo;
7 private $corbata = "SI";
8
9 function __construct($nombre="", $pelo="negro"){
10 $this->nombre = $nombre;
11 $this->colorPelo = $pelo;
12 }
13
14 function __destruct(){
15 //print $this->nombre." dice: 'Adios, mundo cruel"."<br>";
16 }
17
18 function __set($name, $valor){
19 print "La propiedad ".$name." se actualizo a ".$valor."<br>";
20 if($name=="corbata"){
21 if($valor!="SI") $valor = "NO";
22 }
23 $this->$name = $valor;
24 }
25
26 function __get($name){
27 return $this->$name;
28 }
29
30 function setCorbata($c="SI"){
31 if($c!="SI"){
32 $corbata = "NO";
33 }
34 $this->corbata = $c;
35 }
36
37 function setNombre($n="gato"){
1 <?php
2 class GatoVolador extends Gato{
3 function nombreGatoVolador(){
4 return $this->nombre;
5 }
6 function maullar(){
7 print parent::maullar()."<br>";
8 return "miau, miau, miau y miau";
9 }
10 }
11 ?>
Listado 3.3.3. GatoVolador.php
1 <?php
2 abstract class Mamifero{
3 //Metodo Abstracto
4 abstract public function saludo();
5
6 //Método no-abstracto
7 public function maullar(){
8 return "miau, miau";
9 }
10 }
11 class Gato extends Mamifero{
12 public function saludo(){
13 return "Hola Mundo";
14 }
15 }
16
17 $demostenes = new Gato();
18
19 print "saludo ".$demostenes->saludo()."<br>";
20 print "Maullar ".$demostenes->maullar()."<br>";
21 ?>
Listado 3.4.1. clasesAbstractas.php
3.5. Interfaces
● Las interfaces nos permiten crear código con el cual especificar qué métodos deben ser implementados por una
clase (prototipos), sin definir su implementación.
● Las interfaces se definen con la palabra reservada interface.
● Los métodos declarados en una interfaz deben ser públicos.
● Para implementar una interface desde una clase se utiliza la palabra reservada implements.
● Una clase puede implementar más de una interface si se desea.
1 <?php
2 interface iMamifero{
3 public function andar();
4 public function decir();
5 }
6
7 class Gato implements iMamifero{
8 public function andar(){
9 return "camina";
10 }
11 public function decir(){
12 return "miau, miau";
13 }
14 }
15
16 class Delfin implements iMamifero{
17 public function andar(){
18 return "nada";
19 }
20 public function decir(){
21 return "iu. iu";
22 }
23 }
24
25 class Murcielago implements iMamifero{
26 public function andar(){
27 return "volar";
28 }
29 public function decir(){
30 return "iiii, iiii";
31 }
32 }
33
34 $gato = new Gato();
35 $delfin = new Delfin();
36 $murcielago = new Murcielago();
37
38 print "El gato ".$gato->andar()." y dice ".$gato->decir()."<br>";
39 print "El delfin ".$delfin->andar()." y dice ".$delfin->decir()."<br>";
40 print "El murcielago ".$murcielago->andar()." y dice ".$murcielago->decir()."<br>";
1 <?php
2 class Gato{
3 public $peso = "publico";
4 private $genero = "private";
5 protected $edad = "protegido";
6
7 function iteracion(){
8 print "Iteracion dentro de la clase"."<br>";
9 foreach ($this as $clave => $valor) {
10 print $clave." -> ".$valor."<br>";
11 }
12 }
13 }
14
15 $gato = new Gato();
16
17 $gato->iteracion();
18
19 print "<br>"."Iteracion fuera de la clase"."<br>";
20 foreach ($gato as $clave => $valor) {
21 print $clave." -> ".$valor."<br>";
22 }
23 ?>
Listado 3.6.1. iteracion.php
1 <?php
2 final class Gato{
3 public function ronronear(){
4 return "ronronear";
5 }
6 final function maullar(){
7 return "miau, miau";
8 }
9 }
10
11 class GatoVolador extends Gato{
12 /*public function maullar(){
13 return "miauuuuu, miauuuuu";
14 }*/
15
16 public function ronronear(){
17 return "ron, ron, ron";
18 }
19 }
20
21 $gatoVolador = new GatoVolador();
22
23 print "Maullar: ".$gatoVolador->maullar()."<br>";
24 print "Ronronear: ".$gatoVolador->ronronear()."<br>";
25 ?>
Listado 3.7.1. final.php
1 <?php
2 class Gato{
3 public $bandera;
4 }
5 class Perro{
6 public $bandera;
7 }
8 $gato1 = new Gato();
9 $gato2 = new Gato();
10 $gato3 = $gato1;
11 $perro1 = new Perro();
12
13 print "Comparamos elementos de la misma clase"."<br>";
14 print "gato1 == gato2 =>";
15 print ($gato1==$gato2)?"Verdadero":"Falso";
16 print "<br>";
17
18 print "gato1 != gato2 =>";
19 print ($gato1!=$gato2)?"Verdadero":"Falso";
20 print "<br>";
21
22 print "gato1 === gato2 =>";
23 print ($gato1===$gato2)?"Verdadero":"Falso";
24 print "<br>";
25
26 print "gato1 !== gato2 =>";
27 print ($gato1!==$gato2)?"Verdadero":"Falso";
28 print "<br>";
29
30 print "<br>";
31 print "Comparamos elementos de la misma clase a la misma referencia"."<br>";
32 print "gato1 == gato3 =>";
33 print ($gato1==$gato3)?"Verdadero":"Falso";
34 print "<br>";
35
36 print "gato1 != gato3 =>";
37 print ($gato1!=$gato3)?"Verdadero":"Falso";
38 print "<br>";
39
40 print "gato1 === gato3 =>";
41 print ($gato1===$gato3)?"Verdadero":"Falso";
1 <?php
2 $gato = new Class("Don Gato"){
3 private $nombre;
4
5 function __construct($nombre){
6 $this->nombre = $nombre;
7 }
8 public function getNombre(){
9 return "Mi nombre es ".$this->nombre."<br>";
10 }
11 };
12 print $gato->getNombre();
13 ?>
Listado 3.9.1. clasesAnonimas.php
1 <?php
2 interface Animal{
3 function nacer();
4 function crecer();
5 function reproducir();
6 function morir();
7 }
8
9 abstract class Vertebrado implements Animal{
10 private $huesos;
11
12 public function getHuesos(){ return $this->huesos; }
13 public function nacer(){};
14 public function crecer(){};
15 public function reproducir(){};
16 public function morir(){};
17 }
18
19 abstract class Invertebrado implements Animal{
20 use Oviparo;
21 private $hemocianina;
22
23 public function getHemocianina(){ return $this->hemocianina; }
24 public function nacer(){};
25 public function crecer(){};
26 public function reproducir(){};
27 public function morir(){};
28 }
29
30 trait Oviparo{
31 private $huevos;
32 public function getHuevos(){ return $this->huevos; }
33 }
34
35 class Molusco extends Invertebrado{
36 private $radula;
37 public function getRadula(){ return $this->radula; }
38 }
39 class Reptil extends Vertebrado{
40 use Oviparo;
41 private $escamas;
Introducción:
En esta capítulo estudiaremos los siguientes puntos de los espacios de nombres o
namespace:
1. Introducción a los espacio de nombres o namespace.
2. Definir espacios de nombres
3. Definir sub-espacios de nombres
4. Definir varios espacios de nombres
5. Llamado de los espacios de nombres
6. Espacios de nombres y características dinámicas del lenguaje
7. La palabra reservada namespace y la constante __NAMESPACE__
8. Uso de los espacios de nombres: el comando “use”
9. Espacio global
Introducción a la programación orientada a objeto con PHP
Nota: Los nombres de los espacios de nombres PHP y php, y los nombres compuestos a
partir de estos (como PHP\Clases) están reservados para el uso interno del lenguaje y no
deben utilizarse en el código del espacio del usuario.
1 <?php
2 namespace Perro;
3
4 const NOMBRE = "Lazzy";
5 class MiPerro { /*...*/}
6 function pasearAlPerro() { /*******/ }
7
8 ?>
Listado 4.2.1. crearEspacioNombres.php
1 <?php
2 namespace Perro;
3
4 const NOMBRE = "Lazzy";
5 class MiPerro { /*...*/}
6 function pasearAlPerro() { /*******/ }
7
8 ?>
Listado 4.3.1. crearEspacioNombres.php
1 <?php
2 namespace Perro;
3
4 const NOMBRE = "Lazzy";
5 class MiPerro { /*...*/}
6 function pasearAlPerro() { /*******/ }
7
8 ?>
Listado 4.3.2. NamespaceSubespacio.php
1 <?php
2 namespace Perro{
3 const NOMBRE = "Lazzy";
4 class Comer{/************/}
5 function pasear(){/***********/}
6 }
7
8 namespace Gato{
9 const NOMBRE = "Garfield";
10 class Comer{/************/}
11 function pasear(){/***********/}
12 }
13 ?>
Listado 4.4.1. namespaceVarios.php
1 <?php
2 namespace Perro;
3 const NOMBRE = "Lazzy";
4 class Comer{/************/}
5 function pasear(){/***********/}
6
7 namespace Gato;
8 const NOMBRE = "Garfield";
9 class Comer{/************/}
10 function pasear(){/***********/}
11 ?>
Listado 4.4.2. namespaceVariosSinLlaves.php
1 <?php
2 namespace Animal\Perro;
3 include "namespaceLlamarPerro.php";
4
5 const NOMBRE = "Perro";
6 function comer(){
7 print "Estoy comiendo, perro<br>";
8 }
9 class Pasear{
10 static function paseo(){
11 print "Estoy paseando, perro<br>";
12 }
13 }
14
15 //Nombre no cualificado
16 comer();
17 Pasear::paseo();
18 print NOMBRE."<br>";
19 print "<hr>";
20 //Nombre cualificado
21 salchicha\comer();
22 salchicha\Pasear::paseo();
23 print salchicha\NOMBRE."<br>";
24 print "<hr>";
25 //Nombre completamente cualificado
26 \Animal\Perro\salchicha\comer();
27 \Animal\Perro\salchicha\Pasear::paseo();
28 print \Animal\Perro\salchicha\NOMBRE."<br>";
29 ?>
Listado 4.5.1. namespaceLlamarAnimal.php
1 <?php
2 namespace Animal\Perro\salchicha;
3
1 <?php
2 namespace miNamespace;
3
4 class miClase{
5 function __construct(){
6 print "Hola desde la funcion constructora<br>";
7 }
8 }
9 function miFuncion(){
10 print "Hola desde la función<br>";
11 }
12 const miConstante = "Hola<br>";
13
14 //dinamica
15 $a = "\miNamespace\miClase";
16 $clase = new $a;
17 $b = "\miNamespace\miFuncion";
18 $b();
19 print constant("\miNamespace\miConstante");
20 ?>
Listado 4.6.1. namespaceDinamico.php
1 <?php
2 namespace Perro;
3 //print "***".namespace."***";
4 class Ladrar{
5 function __construct()
6 {
7 print "guau, guau<br>";
8 }
9 }
10
11 $perro = new namespace\Ladrar();
12 ?>
Listado 4.7.1. __NAMESPACE__.php
Versiones: PHP7
● Las clases, funciones y constantes que se importen desde el mismo namespace ahora pueden ser agrupadas en
una única sentencia use.
1 <?php
2 require "use.php";
3
4 use Animales\Mamiferos\{ Perro as MiPerro, Gato };
5 use function Animales\Mamiferos\{ladrar as ladrido, maullar};
6 use const Animales\Mamiferos\{PERRO as DOG, GATO as CAT };
7
8 print "<h2>Clases del espacio de nombres</h2>";
9 $perro = new MiPerro;
10 $gato = new Gato;
11
12 print "<h2>Funciones del espacio de nombres</h2>";
13 ladrido();
14 maullar();
15
16 print "<h2>Constantes del espacio de nombres</h2>";
17 print DOG."<br>";
18 print CAT."<br>";
19 ?>
Listado 4.8.1. index.php
1 <?php
2 namespace Animales\Mamiferos;
3
4 class Perro{
5 function __construct(){
6 print "Hola, soy un perro<br>";
7 }
8 }
9 class Gato{
10 function __construct(){
11 print "Hola, soy un gato<br>";
12 }
13 }
14 function ladrar(){ print "Guau, guau<br>"; }
15 function maullar(){ print "Miau, miau<br>"; }
16
1 <?php
2 namespace miNameSpace\miSubNameSpace;
3
4 function fopen($archivo){
5 $f = \fopen($archivo);
6 return $f;
7 }
8
9 class Exception extends \Exception{}
10
11 $e = new Expection("Hola"); //la clase del namespace
12 $e2 = new \Expection("Hola, otra vez"); //nos referimos a la clase global
13
14 const E_ERROR = 40;
15
16 print E_ERROR;
17 print \E_ERROR;
18 ?>
Listado 4.9.1. namespaceGlobal.php
Introducción:
Introducción a la programación orientada a objeto con PHP
1 <?php
2 require_once("clases/Sesion.php");
3 $sesion = new Sesion();
4 if($sesion->estadologin()){
5 header("location:inicio.php");
6 } else {
7 header("location:login.php");
8 }
9 ?>
Listado 5.1.1. index.php
1 <?php
2 require_once("clases/Sesion.php");
3 require_once("clases/MySQLdb.php");
4 require_once("clases/Usuario.php");
5 $sesion = new Sesion();
6 if(isset($_POST["correo"])){
7 $usuario = $_POST["correo"];
8 if(Usuario::buscaUsuario($usuario)){
9 $sesion->inicioLogin($usuario);
10 header("location:inicio.php");
11 exit;
12 }
13 }
14 ?>
15 <!DOCTYPE html>
16 <html>
17 <head>
18 <meta charset="utf-8">
19 <title>Login</title>
20 </head>
21 <body>
22 <form action="login.php" method="post">
23 <label for="correo">Correo:</label>
24 <input type="email" name="correo" id="correo"/><br>
25 <input type="submit" value="Entrar"/>
26 </form>
27 </body>
28 </html>
Listado 5.1.2. login.php
1 <?php
2 require "clases/Sesion.php";;
1 <?php
2 require "clases/Sesion.php";
3 require "clases/MySQLdb.php";
4 require "clases/Albumes.php";
5 require "clases/Usuario.php";
6 require "clases/Estampa.php";
7 $sesion = new Sesion();
8 if($sesion->estadologin()==false){
9 header("location:login.php");
10 }
11 $albumes = new Albumes();
12 $estampas = new Estampa();
13 $usuarios = new Usuario();
14 //0 id, 1 nombre, 2 numestampas del album
15 $album = $albumes->leeAlbum();
16 $idUsuario = $usuarios->getIdUsuario($sesion->getUsuario());
17 //
18 if (isset($_POST["estampa"])) {
19 $estampa = isset($_POST["estampa"])?$_POST["estampa"]:"";
20 $estado = isset($_POST["estado"])?$_POST["estado"]:"";
21 $usuario = isset($_POST["usuario"])?$_POST["usuario"]:"";
22 $idAlbum = isset($_POST["album"])?$_POST["album"]:"";
23 if(!$estampas->actualizarEstampa($idAlbum, $usuario, $estampa, $estado)){
24 print "Error al actualizar la estampa"."<br>";
25 }
26 }
27 //
28 $estampasUsuario = $estampas->getEstampasUsuario($idUsuario,$album[0]);
29 if ($estampasUsuario==0) {
30 $albumes->creaAlbum($idUsuario, $album[0], $album[2]);
31 $estampasUsuario = $estampas->getEstampasUsuario($idUsuario,$album[0]);
32 }
33 $estampasUsuario_array = $estampas->getAlbumUsuario($idUsuario,$album[0]);
34 $estadisticas_array = $estampas->getEstadisticas($idUsuario,$album[0]);
35 function cadenaEstado($indice, $numEstampas,$idUsuario,$idAlbum){
36 global $estampasUsuario_array;
37 $edos = array("No la tengo", "Ya la tengo", "Repetida");
38 if($indice<$numEstampas){
39 print "<td>";
40 print armaEstampa($estampasUsuario_array[$indice]["numero"],$idAlbum,$idUsuario);
41 print "</td>";
42 if($estampasUsuario_array[$indice]["estado"]>=0 &&
43 $estampasUsuario_array[$indice]["estado"]<count($edos)){
44 print "<td class='";
45 if($estampasUsuario_array[$indice]["estado"]==0) print "nolatengo";
1 <?php
2 class MySQLdb{
3 private $host = "localhost";
4 private $usuario = "root";
5 private $clave = "root";
6 private $db = "albumes";
7 private $puerto = "3306"; //MAMP para windows
8 private $conn;
9
10 public function __construct(){
11 $this->conn = mysqli_connect(
12 $this->host,
13 $this->usuario,
14 $this->clave,
15 $this->db,
16 $this->puerto);
17 if(mysqli_connect_error()){
18 printf("Error en la conexión de la base de datos %d",mysqli_connect_error());
19 exit;
20 }
21 }
22
23 public function query($q){
24 $data = array();
25 if($q!=""){
26 if($r = mysqli_query($this->conn, $q)){
27 $data = mysqli_fetch_row($r);
28 }
29 }
30 return $data;
31 }
32
33 public function querySelect($q){
34 $data = array();
35 if($q!=""){
36 if($r = mysqli_query($this->conn, $q)){
37 while($row = mysqli_fetch_assoc($r)){
38 array_push($data,$row);
39 }
40 }
41 }
42 return $data;
43 }
44
45 public function queryNoSelect($q){
1 <?php
2 class Albumes{
3 private $id;
4 private $nombre;
5 private $estampas;
6
7 public function __construct(){}
8
9 public function numAlbumes(){
10 $data = array();
11 $db = new MySQLdb();
12 $data = $db->query("SELECT count(*) FROM albumes");
13 $db->close();
14 unset($db);
15 return $data[0];
16 }
17
18 public function leeAlbum(){
19 $db = new MySQLdb();
20 $data = $db->query("SELECT * FROM albumes");
21 $db->close();
22 unset($db);
23 return $data;
24 }
25
26 public function creaAlbum($idUsuario, $idAlbum, $numEstampas){
27 //estado
28 //0 no la tengo
29 //1 ya la tengo
30 //2 o más repetido
31 $db = new MySQLdb();
32 for ($i=1; $i <= $numEstampas ; $i++) {
33 $sql = "INSERT INTO estampas VALUES(0,";
34 $sql .= $idAlbum.", ";
35 $sql .= $idUsuario.", ";
1 <?php
2 class Estampa{
3 private $id;
4 private $album;
5 private $usuario;
6 private $numero;
7 private $estado;
8
9 public function __construct(){}
10
11 public function numEstampas(){
12 $data = array();
13 $db = new MySQLdb();
14 $data = $db->query("SELECT count(*) FROM estampas");
15 $db->close();
16 unset($db);
17 return $data[0];
18 }
19
20 public function getEstampasUsuario($idUsuario, $idAlbum){
21 $data = array();
22 $db = new MySQLdb();
23 $sql = "SELECT count(*) FROM estampas WHERE album=".$idAlbum;
24 $sql .= " AND usuario=".$idUsuario;
25 $data = $db->query($sql);
26 $db->close();
27 unset($db);
28 return $data[0];
29 }
30
31 public function getAlbumUsuario($idUsuario, $idAlbum){
32 $data = array();
33 $db = new MySQLdb();
34 $sql = "SELECT * FROM estampas WHERE album=".$idAlbum." AND usuario=".$idUsuario;
35 $data = $db->querySelect($sql);
36 $db->close();
37 unset($db);
38 return $data; // arreglo
39 }
40
1 <?php
2 class Sesion{
3 private $login = false;
4 private $usuario;
5
6 function __construct(){
7 session_start();
8 $this->verificaLogin();
9 if ($this->login) {
10 # code...
11 } else {
12 # code...
13 }
1 body{
2 width:800px;
3 margin:0 auto;
4 }
5 td{
6 text-align: center;
7 }
8 th{
9 background-color: #66ffff;
10 }
11 h1,h2{
12 text-align: center;
13 }
14 .yalatengo{
15 background-color: #00ff66;
16 }
17 .nolatengo{
18 background-color: #FFFFCC;
19 }
20 .repetida{
21 background-color: #FF9966;
22 }
Listado 5.3.1. main.css
Indice