Curso: "Programacin Orientada a Objetos PHP5" 2013
Programacin Orientada a Objetos:
Clases y Objetos Mdulo 3 / parte 1
Todos los logos y marcas utilizados en este documento, estn registrados y pertenecen a sus respectivos dueos. AUTORES: andresguzf@gmail.com WEB: http://formacion-bdi.bolsadeideas.cl | | Clases y Objetos I 1
Curso: "Programacin Orientada a Objetos PHP5" 2013
Objetivo El objetivo de esta prctica de laboratorio es entregar los conceptos de clases en programacin orientada a objeto, mediante diversos ejemplos crearemos y usaremos nuestras propias Clases PHP.
AUTORES: andresguzf@gmail.com WEB: http://formacion-bdi.bolsadeideas.cl | | Clases y Objetos I 2
Curso: "Programacin Orientada a Objetos PHP5" 2013
Ejercicio 1: Creando nuestra primera Clase PHP Estudiante 1. Abrir Netbeans IDE 2. Crear un proyecto Netbeans: PHP Application Seleccionar File desde el men superior y seleccionar New Project. Observar que aparece la ventana de dialogo New Project. Seleccionar PHP bajo Categories, y Seleccionar PHP Application bajo la seccin Projects. Clic Next.
AUTORES: andresguzf@gmail.com WEB: http://formacion-bdi.bolsadeideas.cl | | Clases y Objetos I 3
Curso: "Programacin Orientada a Objetos PHP5" 2013
Bajo el panel Name and Location, para el Nombre del Proyecto (Project Name), ingrese ProyectoEjemploEstudiante. Este es el nombre que se le dar al proyecto. Verificar (Muy importante) en Sources Folder que el proyecto se encuentre dentro del Web Root (carpeta htdocs de apache) de nuestro servidor web apache, si estamos usando Xampp debera estar dentro de C:\xampp\htdocs\ProyectoEjemploEstudiante. En el ejemplo usaremos el servidor de Zend por lo tanto nuestro Source Folder debe ser C:\Zend\Apache2\htdocs\ProyectoEjemploEstudiante Clic Finish. AUTORES: andresguzf@gmail.com WEB: http://formacion-bdi.bolsadeideas.cl | | Clases y Objetos I 4
Curso: "Programacin Orientada a Objetos PHP5" 2013
Observe que el proyecto ProyectoEjemploEstudiante ha sido creado bajo la pestaa Projects de NetBeans IDE y adems ha generado automticamente el archivo index.php el cual es desplegado en el editor de cdigo del IDE.
AUTORES: andresguzf@gmail.com WEB: http://formacion-bdi.bolsadeideas.cl | | Clases y Objetos I 5
Curso: "Programacin Orientada a Objetos PHP5" 2013
3. Creando la clase PHP Estudiante: Clic derecho en el proyecto ProyectoEjemploEstudiante y seleccionamos New->PHP Class.
Observe que aparece la ventana para crear una clase PHP: New PHP Class Para el nombre de la case (Class Name), ingrese Estudiante Clic Finish. AUTORES: andresguzf@gmail.com WEB: http://formacion-bdi.bolsadeideas.cl | | Clases y Objetos I 6
Curso: "Programacin Orientada a Objetos PHP5" 2013
Observe que se crea la clase Estudiante.php y es desplegada en el editor de cdigo del IDE. Modifique la clase Estudiante.php como se muestra en el Cdigo de abajo, poner especial atencin en los comentarios resaltados con negrita. <?php
/** * Description of Estudiante * * @author Andrs Guzmn F */ class Estudiante {
// Declaramos las variables de instancia. private $_nombre; private $_apellido; private $_notaMatematica; private $_notaLenguaje; private $_notaCiencia; // Declaramos las variables estticas o de la clase. private static $_contadorAlumnos = 0;
/** * Calcula el promedio de las asignaturas, matemticas, lenguaje y ciencias */ AUTORES: andresguzf@gmail.com WEB: http://formacion-bdi.bolsadeideas.cl | | Clases y Objetos I 7
Curso: "Programacin Orientada a Objetos PHP5" 2013
public function getPromedio() { $resultado = 0; $resultado = ($this->getNotaMatematica() + $this->getNotaLenguaje() + $this->getNotaCiencia() ) / 3; return $resultado; }
/** * Retorna el nmero de las instancias/objetos de la clase Estudiante */ public static function getContadorAlumnos() { return self::$_contadorAlumnos; }
/** * Incrementa el nmero de las instancias/objetos de la clase Estudiante. * Este es un mtodo esttico. */ public static function incrementaContadorAlumnos() { self::$_contadorAlumnos++; }
public function getApellido() { return $this->_apellido; }
public function setApellido($apellido) { $this->_apellido = $apellido; }
public function getNombre() { return $this->_nombre; }
public function setNombre($nombre) { $this->_nombre = $nombre; }
public function getNotaLenguaje() { return $this->_notaLenguaje; }
public function setNotaLenguaje($notaLenguaje) { $this->_notaLenguaje = $notaLenguaje; }
public function getNotaMatematica() { return $this->_notaMatematica; }
public function setNotaMatematica($notaMatematica) { $this->_notaMatematica = $notaMatematica; }
public function getNotaCiencia() { return $this->_notaCiencia; }
public function setNotaCiencia($notaCiencia) { AUTORES: andresguzf@gmail.com WEB: http://formacion-bdi.bolsadeideas.cl | | Clases y Objetos I 8
Curso: "Programacin Orientada a Objetos PHP5" 2013
$this->_notaCiencia = $notaCiencia; } } 4. Modificar el contenido generado por el IDE en el index.php. Modifique index.php como se muestra en el Cdigo de abajo, poner especial atencin en los comentarios resaltados con negrita (es decir elimine todo lo que se gener en index.php por el cdigo de abajo). <?php require_once 'Estudiante.php';
/** * @author Andrs Guzmn */ class EjemploEstudiante {
public static function run() { // Creamos un objeto instancia de la clase Estudiante. $andres = new Estudiante();
// Incrementamos el contador de alumnos llamando al mtodo esttico. Estudiante::incrementaContadorAlumnos();
// Creamos otro objeto instancia de la clase Estudiante. $james = new Estudiante();
// Incrementamos el contador de alumnos llamando al mtodo esttico. Estudiante::incrementaContadorAlumnos();
// Creamos un tercer objeto instancia de la clase Estudiante. $john = new Estudiante();
// Incrementamos el contador de alumnos llamando al mtodo esttico. Estudiante::incrementaContadorAlumnos();
// Asignamos los nombres y apellidos de los estudiantes. $andres->setNombre("Andres"); $andres->setApellido("Guzman"); $james->setNombre("James"); $james->setApellido("Gosling"); $john->setNombre("John"); $john->setApellido("Doe");
// Imprimimos el nombre y apellido de Andrs. echo "Nombres = " . $andres->getNombre() . " " . $andres->getApellido() . "<br />"; // Imprimimos el nombre y apellido de James. echo "Nombres = " . $james->getNombre() . " " . $james->getApellido() . "<br />"; // Imprimimos el nombre y apellido de John. echo "Nombres = " . $john->getNombre() . " " . $john->getApellido() . "<br />";
// Imprimimos el nmero de estudiantes. echo "Total de Estudiantes = " . Estudiante::getContadorAlumnos(). "<br />"; } } // Ejecutamos el Ejemplo EjemploEstudiante::run(); AUTORES: andresguzf@gmail.com WEB: http://formacion-bdi.bolsadeideas.cl | | Clases y Objetos I 9
Curso: "Programacin Orientada a Objetos PHP5" 2013
5. Construir y ejecutar el programa Clic derecho del mouse sobre el proyecto ProyectoEjemploEstudiante y seleccionar Run Observe el resultado en el Navegador. (Figura de abajo):
6. Nuevamente modificamos el contenido del archivo index.php. Modifique el index.php como se muestra en el Cdigo de abajo, poner especial atencin en los cdigos agregados que se resaltados con negrita y color azul. <?php
require_once 'Estudiante.php';
/** * * @author Andrs Guzmn */ class EjemploEstudiante {
public static function run() {
// Creamos un objeto instancia de la clase Estudiante. $andres = new Estudiante();
// Incrementamos el contador de alumnos llamando al mtodo esttico. Estudiante::incrementaContadorAlumnos();
// Creamos otro objeto instancia de la clase Estudiante. $james = new Estudiante();
// Incrementamos el contador de alumnos llamando al mtodo esttico. Estudiante::incrementaContadorAlumnos();
// Creamos un tercer objeto instancia de la clase Estudiante. $john = new Estudiante();
// Incrementamos el contador de alumnos llamando al mtodo esttico. Estudiante::incrementaContadorAlumnos();
// Asignamos los nombres y apellidos de los estudiantes. $andres->setNombre("Andres"); $andres->setApellido("Guzman"); $james->setNombre("James"); $james->setApellido("Gosling"); $john->setNombre("John"); $john->setApellido("Doe");
// Imprimimos el nombre y apellido de Andrs. Nombres = Andres Guzman Nombres = James Gosling Nombres = John Doe Total de Estudiantes = 3 AUTORES: andresguzf@gmail.com WEB: http://formacion-bdi.bolsadeideas.cl | | Clases y Objetos I 10
Curso: "Programacin Orientada a Objetos PHP5" 2013
// Imprimimos el nombre y apellido de James. echo "Nombres = " . $james->getNombre() . " " . $james->getApellido() . "<br />";
// Imprimimos el nombre y apellido de John. echo "Nombres = " . $john->getNombre() . " " . $john->getApellido() . "<br />";
// Imprimimos el nmero de estudiantes. echo "Total de Estudiantes = " . Estudiante::getContadorAlumnos() . "<br />";
// Asignamos las notas del alumno John Doe. $john->setNotaCiencia(5.9); $john->setNotaLenguaje(6.3); $john->setNotaMatematica(6.8);
// Imprimimos el promedio de notas de John Doe. echo "Promedio de John Doe = " . $john->getPromedio(); }
} // Ejecutamos el Ejemplo EjemploEstudiante::run();
7. Construir y ejecutar el programa Clic derecho del mouse sobre el proyecto ProyectoEjemploEstudiante y seleccionar Run Observe el resultado en el Navegador. (Figura de abajo) Nombres = Andres Guzman Nombres = James Gosling Nombres = John Doe Total de Estudiantes = 3 Promedio de John Doe = 6.3333333333333
AUTORES: andresguzf@gmail.com WEB: http://formacion-bdi.bolsadeideas.cl | | Clases y Objetos I 11
Curso: "Programacin Orientada a Objetos PHP5" 2013
Ejercicio 2: Generar y ejecutar una aplicacin que utiliza variables estticas - static (class) y variables de instancia. 1. Crear un proyecto Netbeans: PHP Application Seleccionar File desde el men superior y seleccionar New Project. Seleccionar PHP bajo Categories, y Seleccionar PHP Application bajo Projects. Clic Next Bajo el panel Name and Location, para el Nombre del Proyecto (Project Name), ingrese ProyectoEjemploVariableEstatica. Este es el nombre que se le dar al proyecto. Verificar (Muy importante) en Sources Folder que el proyecto se encuentre dentro del Web Root (carpeta htdocs de apache) de nuestro servidor web apache. Si usamos XAMPP: C:\xampp\htdocs\ProyectoEjemploVariableEstatica, si usamos Zend Server C:\Zend\Apache2\htdocs\ProyectoEjemploVariableEstatica Clic Finish.
2. Creando la clase PHP Variables: Clic derecho en el proyecto ProyectoEjemploVariableEstatica y seleccionamos New- >PHP Class. Observe que aparece la ventana para crear una clase PHP: New PHP Class Para el nombre de la case (Class Name), ingrese Variables Clic Finish.
AUTORES: andresguzf@gmail.com WEB: http://formacion-bdi.bolsadeideas.cl | | Clases y Objetos I 12
Curso: "Programacin Orientada a Objetos PHP5" 2013
Observe que se crea la clase Variables.php y es desplegada en el editor de cdigo del IDE. Modifique la clase Variables.php como se muestra en el Cdigo de abajo, poner especial atencin en los comentarios resaltados con negrita. <?php /** * Description of Variables * * @author Andrs Guzmn F */
class Variables {
// Variables estticas de la clase public static $staticIntA = 10; public static $staticStringB = "Soy un String esttico de la clase";
// Variables de la instancia public $instanciaIntA = 20; public $instanciaStringB = "Soy un String de la instancia";
}
3. Modificar el contenido generado por el IDE en el index.php. Modifique index.php como se muestra en el Cdigo de abajo, poner especial atencin en los comentarios resaltados con negrita. <?php require_once 'Variables.php';
/** * * @author Andrs Guzmn */ class EjemploVariableEstatica {
public static function run() {
$saltoLinea = "<br />";
// Accediendo a las variables estticas de la clase Variables. // Notamos que NO tenemos que crear la instanciau objeto de la clase Variables, // accedemos directamente. echo 'Variables::$staticIntA = ' . Variables::$staticIntA; echo $saltoLinea; echo 'Variables::$staticStringB = ' . Variables::$staticStringB; echo $saltoLinea;
AUTORES: andresguzf@gmail.com WEB: http://formacion-bdi.bolsadeideas.cl | | Clases y Objetos I 13
Curso: "Programacin Orientada a Objetos PHP5" 2013
// Accediendo a las variables de instancia de la clase Variables. // Tenemos que crear la instanciau objeto de la clase Variables // para acceder a las variables de la instancia de la clase Variables. $objInstancia1 = new Variables(); $objInstancia2 = new Variables();
// Las variables estticas tambin pueden ser accedidas desde el objeto instancia. echo '$objInstancia1::$staticIntA = ' . $objInstancia1::$staticIntA; echo $saltoLinea;
// Las variables estticas pueden ser accedidas por mltiples objetos instancias y // comparten el mismo valor (ya que son estticas o de la clase) $objInstancia2::$staticIntA = 550; echo '$objInstancia1::$staticIntA = ' . $objInstancia1::$staticIntA; echo $saltoLinea; echo '$objInstancia2::$staticIntA = ' . $objInstancia2::$staticIntA; echo $saltoLinea; echo 'Variables::$staticIntA = ' . Variables::$staticIntA; } } // Arrancamos el ejemplo EjemploVariableEstatica::run();
AUTORES: andresguzf@gmail.com WEB: http://formacion-bdi.bolsadeideas.cl | | Clases y Objetos I 14
Curso: "Programacin Orientada a Objetos PHP5" 2013
4. Construir y ejecutar el programa Clic derecho del mouse sobre el proyecto ProyectoEjemploVariableEstatica y seleccionar Run Observe el resultado en el Navegador. (Figura de abajo) run: Variables::$staticIntA = 10 Variables::$staticStringB = Soy un String estatico de la clase Variables::$staticStringB = PHP 5 POO Avanzado con Zend Framework MVC! $objInstancia1->instanciaIntA = 1 $objInstancia2->instanciaIntA = 3 $objInstancia1::$staticIntA = 10 $objInstancia1::$staticIntA = 220 Variables::$staticIntA = 220 $objInstancia1::$staticIntA = 550 $objInstancia2::$staticIntA = 550 Variables::$staticIntA = 550
AUTORES: andresguzf@gmail.com WEB: http://formacion-bdi.bolsadeideas.cl | | Clases y Objetos I 15
Curso: "Programacin Orientada a Objetos PHP5" 2013
Ejercicio 3: Generar y ejecutar una aplicacin que utiliza variable esttica para emular un identificador auto-incremental de usuarios. 1. Crear un proyecto Netbeans: PHP Application Seleccionar File desde el men superior y seleccionar New Project. Seleccionar PHP bajo Categories, y Seleccionar PHP Application bajo Projects. Clic Next Bajo el panel Name and Location, para el Nombre del Proyecto (Project Name), ingrese ProyectoIdIncrementalUsuario. Este es el nombre que se le dar al proyecto. Verificar (Muy importante) en Sources Folder que el proyecto se encuentre dentro del Web Root (carpeta htdocs de apache) de nuestro servidor web apache. Clic Finish.
2. Creando la clase PHP Usuario: Clic derecho en el proyecto ProyectoIdIncrementalUsuario y seleccionamos New->PHP Class. Observe que aparece la ventana para crear una clase PHP: New PHP Class Para el nombre de la case (Class Name), ingrese Usuario Clic Finish. Observe que se crea la clase Usuario.php y es desplegada en el editor de cdigo del IDE.
AUTORES: andresguzf@gmail.com WEB: http://formacion-bdi.bolsadeideas.cl | | Clases y Objetos I 16
Curso: "Programacin Orientada a Objetos PHP5" 2013
3. Modifique la clase Usuario.php como se muestra en el Cdigo de abajo, poner especial atencin en los comentarios resaltados con negrita. <?php
/** * @author Andrs Guzmn F */ class Usuario {
// Declaramos las variables de instancia. private $_id; private $_nombre; private $_apellido;
// Declaramos las variables estticas o de la clase. private static $_ultimoId = 0;
function __construct($nombre, $apellido) { $this->_nombre = $nombre; $this->_apellido = $apellido;
// Incrementamos la variable esttica ultimoId y la asignamos a // la variable de instancia id $this->_id = ++self::$_ultimoId; }
/** * El metodo toString(), es un metodo que heredan todos los objetos en PHP, * El metodo toString() permite imprimir el objeto a la medida, al imprimir un objeto * automticamente el runtime de PHP ejecutar el metodo toString() para imprimirlo en la salida */ public function __toString() { return "ID: {$this->_id} - {$this->_nombre} {$this->_apellido} <br />"; } }
AUTORES: andresguzf@gmail.com WEB: http://formacion-bdi.bolsadeideas.cl | | Clases y Objetos I 17
Curso: "Programacin Orientada a Objetos PHP5" 2013
4. Modificar el contenido generado por el IDE en el index.php. Modifique index.php como se muestra en el Cdigo de abajo, poner especial atencin en los comentarios resaltados con negrita. <?php
require_once 'Usuario.php';
/** * * @author Andrs Guzmn */ class IdIncrementalUsuario {
public static function run() {
// Creamos 6 objetos instancias de la clase Usuario. $usuario1 = new Usuario("Andres", "Guzman");//Profesor del Curso PHP POO $usuario2 = new Usuario("Rasmus", "Lerdorf"); //Creador de PHP $usuario3 = new Usuario("Matthew", "Weier O'Phinney"); //Cabeza y Arquitecto de Zend Framework $usuario4 = new Usuario("Albert", "Einstein"); $usuario5 = new Usuario("Bruce", "Lee"); $usuario6 = new Usuario("Linus", "Torvalds"); //Creador de Linux
// Imprimimo los 6 objetos instancias de Usuario. // Automticamente se ejecutar el mtodo toString e imprimira los objetos. // con la forma id + "-" + nombre + " " + apellido echo($usuario1); echo($usuario2); echo($usuario3); echo($usuario4); echo($usuario5); echo($usuario6); }
} // Ejecutamos el programa PHP IdIncrementalUsuario::run();
5. Construir y ejecutar el programa Clic derecho del mouse sobre el proyecto ProyectoIdIncrementalUsuario y seleccionar Run Observe el resultado en el Navegador. (Figura de abajo) ID: 1 - Andres Guzman ID: 2 - Rasmus Lerdorf ID: 3 - Matthew Weier O'Phinney ID: 4 - Albert Einstein ID: 5 - Bruce Lee ID: 6 - Linus Torvalds
AUTORES: andresguzf@gmail.com WEB: http://formacion-bdi.bolsadeideas.cl | | Clases y Objetos I 18
Curso: "Programacin Orientada a Objetos PHP5" 2013
Ejercicio 4: Generar y ejecutar una aplicacin que utiliza mtodos estticos y de la instancia (no estticos). 1. Crear un proyecto Netbeans: PHP Application Seleccionar File desde el men superior y seleccionar New Project. Seleccionar PHP bajo Categories, y Seleccionar PHP Application bajo Projects. Clic Next Bajo el panel Name and Location, para el Nombre del Proyecto (Project Name), ingrese ProyectoEjemploMetodoEstatico. Este es el nombre que se le dar al proyecto. Verificar (Muy importante) en Sources Folder que el proyecto se encuentre dentro del Web Root (carpeta htdocs de apache) de nuestro servidor web apache. Clic Finish.
2. Creando la clase PHP Metodos: Clic derecho en el proyecto ProyectoEjemploMetodoEstatico y seleccionamos New- >PHP Class. Observe que aparece la ventana para crear una clase PHP: New PHP Class Para el nombre de la case (Class Name), ingrese Metodos Clic Finish. Observe que se crea la clase Metodos.php y es desplegada en el editor de cdigo del IDE.
AUTORES: andresguzf@gmail.com WEB: http://formacion-bdi.bolsadeideas.cl | | Clases y Objetos I 19
Curso: "Programacin Orientada a Objetos PHP5" 2013
3. Modifique la clase Metodos.php como se muestra en el Cdigo de abajo, poner especial atencin en los comentarios resaltados con negrita. <?php
/** * * @author Andrs Guzmn F */ class Metodos {
// variable esttica public static $a = 1;
// mtodo esttico public static function metodoEstatico($i) { echo "Ingresando al metodoEstatico(" . $i . ") <br />"; }
// Mtodo de la instancia o NO esttico public function metodoNoEstatico($i) { echo "Ingresando al metodoNoEstatico(" . $i . ") <br />"; } }
AUTORES: andresguzf@gmail.com WEB: http://formacion-bdi.bolsadeideas.cl | | Clases y Objetos I 20
Curso: "Programacin Orientada a Objetos PHP5" 2013
4. Modificar el contenido generado por el IDE en el index.php. Modifique index.php como se muestra en el Cdigo de abajo, poner especial atencin en los comentarios resaltados con negrita. <?php
require_once 'Metodos.php';
/** * * @author Andrs Guzmn */ class EjemploMetodoEstatico {
public static function run() {
$saltoLinea = "<br />";
// Accediendo a la variable esttica de la clase Metodos. // Notamos que no hay que crear la instancia del la clase Metodos con el // operador new, accedemos directamente. echo 'Metodos::$a = ' . Metodos::$a; echo $saltoLinea;
// Invocamos un metodo esttico de la clase Variables. // Notamos que no hay que crear la instancia del la clase Metodos con el // operador new, accedemos directamente. Metodos::metodoEstatico(5);
// La variable esttica tambin puede ser accedida desde un objeto instancia. $d = new Metodos(); echo '$d::$a = ' . $d::$a; echo $saltoLinea;
// El mtodo esttico tambin puede ser invocado desde un objeto instancia. $d::metodoEstatico(0);
// La misma variable esttica tambin puede ser accedida desde mltiple instancias. $e = new Metodos(); echo '$e::$a = ' . $e::$a; echo $saltoLinea;
// Ejecutamos el programa PHP EjemploMetodoEstatico::run();
AUTORES: andresguzf@gmail.com WEB: http://formacion-bdi.bolsadeideas.cl | | Clases y Objetos I 21
Curso: "Programacin Orientada a Objetos PHP5" 2013
5. Construir y ejecutar el programa Clic derecho del mouse sobre el proyecto ProyectoEjemploMetodoEstatico y seleccionar Run Observe el resultado en el Navegador. (Figura de abajo) Metodos::$a = 1 Ingresando al metodoEstatico(5) $d::$a = 1 Ingresando al metodoEstatico(0) $e::$a = 1 Metodos::$a = 4 $d::$a = 4 $e::$a = 4
AUTORES: andresguzf@gmail.com WEB: http://formacion-bdi.bolsadeideas.cl | | Clases y Objetos I 22
Curso: "Programacin Orientada a Objetos PHP5" 2013
Resumen
En esta prctica de laboratorio repasamos los conceptos de clases en programacin orientada a objeto, mediante diversos ejemplos creamos nuestras propias Clases PHP, tambin vimos la diferencia entre las variables y mtodos estticos y de la instancia.
Enva tus consultas a los foros! Aqu es cuando debes sacarte todas las dudas haciendo consultas en los foros correspondientes AUTORES: andresguzf@gmail.com WEB: http://formacion-bdi.bolsadeideas.cl | | Clases y Objetos I 23