Lenguaje de programación PHP

 PHP es un lenguaje de programación de uso general de código del lado del servidor originalmente diseñado para el desarrollo web de contenido dinámico.

La sigla PHP identifica a un lenguaje de programación que nació como Personal Home Page (PHP) Tools.

El lenguaje PHP suele procesarse directamente en el servidor aunque también puede usarse a través de software capaz de ejecutar comandos y para el desarrollo de otra clase de programas.

Actualmente el PHP suele incrustarse dentro del código HTML de las páginas web y ejecutarse desde un servidor.

Una de las ventajas de PHP es su parecido con lenguajes de programación del tipo estructurado (como Perl y C).

En principio, permite establecer una conexión con la base de datos, a través de lo cual es posible, por ejemplo, presentar en pantalla datos personales del cliente cuando éste lo requiera. Pero la característica más importante de PHP es que permite modificar dinámicamente el contenido de una página, lo cual resulta esencial hoy en día.

Sintaxis básica de PHP

PHP solo distingue de sus variables si son minúsculas o mayúsculas, debemos diferenciar el codigo HTML del codigo PHP y para realizar esta diferencia tenemos que abrir el codigo PHP con la etiqueta <?php y cerrarlo con ?>, al finalizar cada instruccion se debe agregar el caracterer ';‘

<?php echo "Esto es una prueba";?>

Como todo lenguaje tiene la posibilidad de agregar comentarios a continuacion veremos las formas de realizar los comenterios

<?php

echo "Hola a Todos!!!"; // Esto es un comentario tipo c++

/* Comentario multilínea
para varias lineas de codigo*/

?> 


Variables

Las variables no tienen un tipo definido, si quieres forzar a que una variable tenga un tipo de datos especifico tienes que utilizar la función settype() que sirve para establecer el tipo de una variable. La forma de escribir una variable es mediante el signo '$' seguido del nombre de la variable, veamos un ejemplo:

<?php
$numero = 4;
$cadena = "hola a todos";
?>

Arrays

PHP también soporta arrays su forma de implementarlos es la siguiente

<?php
$a[0] = "hola";
$a[1] = "chau";
$b["primero"] = 1;
?>


otra forma de ingresar datos a un array es la siguiente:

<?php
$c[] = 0;
$c[] = 1;
$c[] = 2;
?>

Asignar un valor a un array sin indicar el índice hace que ese elemento se agregue al final del array.

También podemos crear arrays multidimensionales, veamos como...Noten que podemos mezclar índices escalares y asociativos.

<?php
$c[1][1] = 0;
$d["uno"][2] = 1;
$f[3]["uno"][4][1] = 2;
?>

Constantes.

La forma de declarar una constante es a través de la palabra clave define, veamos una ejemplo

<?php
define("NOMBRE", "Ariel.");
echo NOMBRE; // muestra "Ariel."
?>


Ejemplo:


<?php

echo "este es un texto escrito en PHP \n ";

$a=2;

$b=3;

$c=$a+$b;

echo "\n el resultado de la suma es: $c ";

?>


Programación con Orientada a Objetos.

Como se puede observar en la figura 1, en el lado derecho está el código necesario para crear una clase con la palabra reservada class, después de colocar el nombre de la clase iniciando con Mayúsculas y en singular, además de usar el camelCase si es necesario, es decir cuando el nombre de mi clase es formado por mas de una palabra, cada inicio de palabra iniciara en mayúsculas.
Por ejemplo, la clase que calcule el volumen de un cubo, la llamaríamos: CalcularVolumenCubo.
Una clase que resuelva una ecuación de segundo grado con la formula general, yo la llamaría: la chicharronera 
Por supuesto que sería un pésimo nombre e incorrecto: 
1. Los identificadores, es decir nombre de variables, de métodos o clases no pueden ser dos palabras con espacios.
2. Debe iniciar en mayúsculas
3. El nombre sería: FormulaGeneral

Atributos

Son variables, pero por favor jamás las llames así, es como cuando yo le dijo amigos a mis  seguidores en Instagram y enseguida me corrigen que no estoy en Facebook. En pocas palabras llamarles variables a los atributos es perder la oportunidad de oírte culto, sabedor de toda la teoría de la POO. (Programación Orientada a objetos). 
Así es, los atributos se conocen por muchos nombres, algunos libros las llaman variables de  instancia, campos o datos miembros. El último nombre me agrada, porque te ayudará a recordar que deben ser privados. ¿Por qué?, porque son los miembros de la clase, nadie las puede tocar sin permiso, igualito como se les explican a los niños “Tus miembros nadie los debe tocar”. Ahora en adelante espero que no se te olvide. 
Otra características o definición técnica es: “los atributos son todas las variables que están definidas fuera de los métodos”, y bueno hasta que te explique los métodos entenderás.
Métodos
Un método, tienen su propio bloque de código en donde se definen actividades que realizará y como resultado regresa un valor especifico. Cada método debe cumplir un objetivo específico, es decir subdividimos las tareas en métodos.
Además, los métodos también ayudan a la comunicación entre objetos, si recuerdan que la POO es un dialogo entre objetos, los métodos realizan esa actividad:



Si regresamos al diagrama de UML de Persona observamos que el método decir la edad, tiene
como propósito calcular la edad de una persona. Entonces el método será el encargado de
solicitar los datos necesarios para calcular la edad a través de sus parámetros, es decir, las
variables que se encuentran entre paréntesis después del nombre del método.
Si lo representamos mediante la figura de abajo el pajarito de la izquierda es el método
decirEdad el cual espera la respuesta del usuario y después le responderá a través del valor de
retorno.


Todos los métodos contienen dos partes: Encabezado y Cuerpo:
Dentro del encabezado encontraremos:
1. La palabra reservada function
2. El nombre del método en minúsculas, que sea verbo y con camelCase.
3. Paréntesis, ya sea vacíos, es decir que ya tiene todos los datos para cumplir su objetivo o dentro
de los paréntesis variables con esos datos necesarios para cumplir con su misión. A esas  variables, se les conoce como parámetros y son variables que solo serán reconocidas en el cuerpo del método.

Dentro del encabezado encontraremos:

1.       La palabra reservada function

2.       El nombre del método en minúsculas, que sea verbo y con camelCase.

3.       Paréntesis, ya sea vacíos, es decir que ya tiene todos los datos para cumplir su objetivo o dentro de los paréntesis variables con esos datos necesarios para cumplir con su misión. A esas variables, se les conoce como parámetros y son variables que solo serán reconocidas en el cuerpo del método.


Fig. 5: Partes de un método


El cuerpo del método esta limitado por llave que abre y llave que cierra, antes de cerrar debo retornar la variable que contenga el resultado de mi objetivo a alcanzar. En este caso regresa la edad, ya que ese el propósito del método decirnos la edad de una persona, con solo darle el año de nacimiento.

Observemos el ejercicio completo, tengo una clase con un método, (solo hay un function). Fuera del método existen 3 variables por lo tanto son atributos, porque no están dentro de ningún método y son privadas. Y la clase esta encapsulada entre las llaves.

Ahora falta instanciar la clase. O sea, crear objetos de esta clase.

Fig. 6: La clase Persona y su edad

Para instanciar a Persona, observemos la figura 7, para poder crear objetos se utiliza la palabra reservada new, el nombre del objeto debe estar en minúsculas y puede ser cualquier nombre que no inicie con números o con _. Recuerda que no existen los tipos de datos por lo tanto solo lleva $nombre. Y ya es un identificador de un objeto. 

Fig. 7: Instanciando la clase Persona

En la línea 17, se puede decir que acabamos de utilizar el molde, recuerdas que la clase era un molde de gelatinas como aparecía en la imagen y los objetos eran diferentes tipos de gelatinas. Pues ahora nosotros tenemos un objeto llamado $obj del molde Persona.

En la línea 18 mandamos a imprimir un letrero que dice “tu edad es” y se concatena con el resultado devuelto por el método decirEdad(). Exacto en java la concatenación era mediante el singo +, aquí en Php se utiliza el punto. Y para mandar a llamar al método se utiliza el nombre del objeto -> (y por favor no me pregunten: “en el teclado donde saco la flechita”). No es una flecha es un guion medio y un símbolo de mayor que. Después de esto, ya sabemos cómo crear una clase que contenga métodos y atributos. Y también sabemos crear objetos de ese molde.


De manera general, podemos identificar que: una clase esta formada por atributos y por métodos, 


Las palabras reservadas son en minúsculas, y el editor las cambia de color azul, debemos de ser muy observadores y recordar estos detalles, que pueden convertirse en errores de sintaxis y mega traumas por no poder ejecutar el código.

Partes de los métodos

El día de hoy profundizaremos en los métodos:

Un método es un bloque de código que tiene un propósito muy específico, es decir, si tenemos una problemática donde se solicitan varias cosas, por cada una de ellas se crea un método, su nombre debe ser descriptivo, y debe regresar un solo valor. En ocasiones podemos hacer trampa y regresar una cadena concatenada con varias respuestas. Pero bueno lo veremos más adelante. 

Los métodos tienen dos grandes partes subdivididas también como se muestra en la siguiente figura:

Todos los métodos inician con su modificador de acceso, es decir, indicando si son privados o públicos, después se coloca la palabra reservada function, seguida del nombre descriptivo, en minúsculas y de preferencia que sea un verbo. Ahora lo representáremos en código: Tenemos un ejemplo de un método llamado calcular

 


Calcular, contienen paréntesis vacíos, eso indica que no tienen parámetros, es decir, no necesita ningún valor del exterior para cumplir con su objetivo.

 

Los parámetros son datos almacenados en variables que le ayudan al método a cumplir su objetivo. Los parámetros son variables locales, que se usan solo dentro del método, al terminar el código se pierden los valores. Si los datos son mas de uno, se enlistan separados de comas.

Observemos con detalle el cuerpo del método calcular, la figura 3, hay variables como $ganancia, $pagar y $this>costo, $this- >cantidad, ¿Cuál es la diferencia de cada uno?, ¿Por qué algunas llevan el this y otras no? Bueno, es fácil identificarlo, se mencionó la clase pasada que todas las variables que se utilizan fuera de los métodos, se conocen como atributos de la clase, indica que pueden ser utilizadas, asignadas y reasignadas en cualquier método de la clase porque son privadas, (para respetar el encapsulamiento). Sin embargo, las variables que no contienen el this, se conocen como variables locales, es decir su alcance solo es el método donde fueron declaradas, fuera de él han sido destruidas.

En nuestro ejemplo de calcular, $ganancia es una variable local, que ya no existe fuera de la llave de cierre del método.

Constructor

Existe un método especial que se llama constructor, como su nombre lo dice es que nos permite construir una instancia, o sea un objeto, es el método que solicita lo básico, lo esencial de atributos para que el objeto pertenezca a esta clase. Los libros lo definen como método para inicializar los atributos de un objeto. Una característica que lo distingue de los demás, a demás de la palabra reservada, es el único método que no regresa ningún valor.

Para diseñar los constructores en Php se utiliza la palabra reservada __construct, mucho cuidado lleva dos guiones bajos antes de la palabra en si.

Su objetivo es inicializar los atributos, recordando que cada método tiene un objetivo muy específico que cumplir. No es necesario definirlo explícitamente, si se dieron cuenta los ejemplos realizados con anterioridad no llevan esa palabra reservada, por lo tanto no tenían constructor definido (es decir creados por el programador), sino que, el compilador proporciona un constructor predeterminado sin parámetros y sus atributos inicializan con sus valores predeterminados 


Veamos un ejemplo 

Deseamos crear un programa que le permita a el dueño de una tiendita calcular el precio de los productos que va a vender y la ganancia de los mismos.

Analicemos los requerimientos del ejemplo:

Lo primero sería pensar en objetos. Es decir, ¿qué atributos tiene cada producto? ¿Y que acciones se pueden hacer sobre esos atributos?


¿Cuántos métodos existirían?

 

1.       El constructor que inicia los atributos básicos del objeto, para cada producto iniciaría con su nombre y su costo.

2.       La ganancia, si yo tengo una tiendita y compro a 5 pesos un producto, sería muy tonto que yo también lo vendiera a 5 pesos, es decir, ¿Cuál sería el objetivo de venderlo?, no ganaría nada, por ello al costo que lo compre debo calcular un porcentaje de ganancia.

3.       El precio, un método que calcule el precio del producto, cada uno tienen un objetivo bien definido.



Bueno ahora que ya tienes la clase te invito a que construyas un objeto para calcular su precio y ganancia:



Tipos de Métodos.

Getters

Existen otros tipos de métodos especiales a parte del constructor, estos los encontramos en todos los libros de POO, ya que como todo método cumplen con objetivos bien claros y siempre llevan prefijos en sus nombres para ser identificados. 



Recordemos que se recomienda declarar a los atributos como privados para realizar el ocultamiento de los datos, por tal motivo no pueden ser obtenidos o modificados directamente, solamente a través de métodos. Y para ellos existen los métodos especiales getters y setters.

Get en ingles significa obtener, es decir, un getter es un método que me permite conocer el valor actual de un atributo de determinado objeto, obtiene el valor del atributo, eso es su propósito de ser. Todos los getters deben iniciar con el prefijo get + nombre del atributo a obtener.

El único objetivo de un getter es regresar el valor del atributo por lo tanto no tienen atributos

Y su única línea de código es retornar el valor del atributo correspondiente.


Setters

Set en ingles se traduce como establecer, es decir, el método setter establece o asigna un valor a determinado atributo, por si se desea cambiar el valor después del constructor, o a un atributo que no fue solicitado en el constructor por no ser tan esencial. 


El objetivo del método setter es asignar un nuevo  valor al atributo, debe llevar el prefijo set + nombre del atributo a modificar. No regresa ningún valor de retorno.

Si mi clase contienen 4 atributos a lo máximo podre tener 4 getters y 4 setters, sin embargo no es necesario crear todos, sino, solo los que creamos que sean necesarios, regresando a nuestro ejemplo, el nombre del producto si lo puedo obtener (getNombre), sin embargo si le cambio el nombre, ya no seria el mismo producto, para ellos seria mejor crear un nuevo objeto de la clase. Otro ejemplo en el año de nacimiento de la clase donde calculábamos la edad, mi año de nacimiento jamás cambiará, por lo tanto no necesito crear el setter.

Método toString

Es un método que me permite mandar a imprimir un objeto con toda la información relevante de su estado, es decir, los valores actuales de sus atributos con solo mandar a imprimir el nombre del objeto y sin llamar al método en si.

A ver mas despacio ¿Verdad?

Si te pudiste dar cuenta en la clase pasada no podía imprimir el nombre del producto, no había forma con el código que teníamos, o como lo dije solo haciendo trampa. 


Aquí en el return podíamos concatenar con el uso del punto letreros para el usuario final más atributos, ósea retornar más de un valor.

Sin embargo, ahora con los getters para que pueda imprimir el nombre del producto sería algo así:


 Aquí en el return podíamos concatenar con el uso del punto letreros para el usuario final más atributos, ósea retornar más de un valor.

Sin embargo, ahora con los getters para que pueda imprimir el nombre del producto sería algo así:

Para mandar a imprimir cualquier atributo sería necesario mandar a traer a su getter como cualquier otro método con :  nombre del objeto ->nombre del método

 Si el atributo nombre fuera publico entonces lo podría mandar a imprimir directamente de la siguiente forma: 

 

Analicemos detenidamente la diferencia: Cada vez que se manda a traer un método después del nombre lleva los paréntesis, aunque no tenga parámetros, eso indica que se manda a llamar a un método.

En este ejemplo, podemos ver que nombre es public, por lo tanto, podemos acceder a el directamente sin ningún método, el código $boing->nombre; indica que se esta llamando a un atributo por eso no tienen los (), sin embargo, cualquier libro decente te dirá que no hagas eso, que los miembros son privados no pueden estar accediendo a ellos cualquiera, ¿dónde quedaría el encapsulamiento y el ocultamiento de los datos? Analízalo como analogía,  Jajaja, es decir cualquier clase decente no permite que toquen sus atributos, solo si ya la cortejaron y ya dio permiso., ósea el getter es una relación importante entre el objeto y el usuario. 

 

Mejor regresemos al toSTring, me permite mandar a imprimir los atributos de un objeto quedaría así:



Se mandará a imprimir los atributos y las cadenas que se coloquen en el return del método toSTring, lleva dos guiones bajos antes del nombre default.

Y para llamar al método toString solo se coloca el nombre del objeto, pero ojo, si los atributos no se inicializaron en el constructor o jamás se utilizaron los métodos de calcular entonces cuando se utilice el método toString los atributos no contendrán valores. Y si un método regresa un valor, pero no lo imprimimos, simplemente no lo vemos. Entonces así se llamaría al método toString



 

Echo $boin; no se llama ni a un atributo, ni aun método, sino al objeto en sí y este implícitamente manda a llamar al método toString();

Comentarios

Entradas populares de este blog

CSS

Repaso de etiquetas HTML

Actividad 11