Esta sección se incluye un resumen sobre algunos conceptos de PHP que son elementales para comenzar a programar con el lenguaje. Se describe como especificar variables, constantes, tipos de dato, operadores y operandos, expresiones, el concepto de asignación en PHP. Es una sección que muestra como los conceptos que fueron desarrollados en la sección anterior se aplican a un lenguaje de programación (en este caso PHP).
Adicionalmente se resume en el apunte la sintáxis asociada a estos conceptos, características de entrada-salida, y la estructura básica de un programa PHP.
En IP utilizaremos el lenguaje de programación php para realizar las implementaciones de nuestros algoritmos. Utilizaremos Visual Studio Code, un entorno de desarrollo en el cual es posible utilizar PHP, para programar. Es posible seguir los siguientes videos para descargar ambos softwares, instalarlos en Ubuntu o Windows y finalmente ejecutar una aplicación hola mundo!
Cuando nos piden que hagamos un programa debemos seguir una cantidad de pasos para asegurarnos de que tendremos éxito en la tarea. La acción irreflexiva (me piden algo, me siento frente a la computadora y escribo rápidamente sin pensar lo que me parece que es la solución) no constituye una actitud profesional (e ingenieril) de resolución de problemas. Toda construcción tiene que seguir una metodología, un protocolo de desarrollo dado.
Existen muchas metodologías para construir programas, pero en este curso aplicaremos una metodología sencilla, que es adecuada para la construcción de programas pequeños, y que se puede resumir en los siguientes pasos:
Una vez analizado el problema, asentar el análisis por escrito.
Al especificar el problema a resolver, documentar la especificación por escrito.
Luego de diseñar la solución, asentar por escrito el diseño, asegurándonos de que esté completo.
La implementación también se debe documentar, con comentarios dentro y fuera del código, al respecto de qué hace el programa, cómo lo hace y por qué lo hace de esa forma.
Al ejecutar las pruebas, documentar los resultados obtenidos.
Cuando se realicen cambios, es necesario documentar el análisis, la especificación, el diseño, la implementación y las pruebas que surjan para llevar estos cambios a cabo.
En su artículo “How to program it”, Simon Thompson plantea algunas preguntas a sus alumnos que son muy útiles para la etapa de diseño:
Al leer un artículo en una revista norteamericana que contiene información de longitudes expresadas en millas, pies y pulgadas, queremos poder convertir esas distancias de modo que sean fáciles de entender. Para ello, decidimos escribir un programa que convierta las longitudes del sistema inglés al sistema métrico decimal. Antes de comenzar a programar, utilizamos la guía de la sección anterior, para analizar, especificar, diseñar, implementar y probar el problema.
1 pie = 30.48 cm
1 pulgada = 2.54 cm
A lo largo de todo el curso usaremos punto decimal, en lugar de coma decimal, para representar valores no enteros, dado que esa es la notación que utiliza PHP.
La tabla obtenida no traduce las longitudes a metros. La manipulamos para llevar todo a metros: - 1 milla = 1609.344 m - 1 pie = 0.3048 m - 1 pulgada = 0.0254 m
Si una longitud se expresa como L millas, F pies y P pulgadas, su conversión a metros se calculará como M = 1609.344 * L + 0.3048 * F + 0.0254 * P Hemos especificado el problema. Pasamos entonces a la próxima etapa.
Leer cuántas millas tiene la longitud dada (y referenciarlo con la variable millas) Leer cuántos pies tiene la longitud dada (y referenciarlo con la variable pies) Leer cuántas pulgadas tiene la longitud dada (y referenciarlo con la variable pulgadas) Calcular metros = 1609.344 * millas + 0.3048 * pies + 0.0254 * pulgadas Mostrar por pantalla la variable metros
ALGORITMO convertirSistemaMetrico
(*Suma tres longitudes en millas, pies y pulgadas convirtiéndolas en metros*)
REAL millas, pies, pulgadas, metros
ESCRIBIR(“¿Cuántas millas?: ”)
LEER(millas)
ESCRIBIR(“¿Cuántos pies?: ”)
LEER(pies)
ESCRIBIR(“¿Cuántas pulgadas?: ”)
LEER(pulgadas)
metros ← 1609.344 * millas + 0.3048 * pies + 0.0254 * pulgadas
ESCRIBIR(“la longitud es de” + metros + “ metros ”)
FIN ALGORITMO convertirSistemaMetrico
<?php
/* Suma tres longitudes en millas , pies y pulgadas convirtiéndolas en metros */
/* REAL $millas ,$pies , $pulgadas , $metros */
echo " Convierte medidas inglesas a sistema metrico ";
echo " ¿Cuántas millas ?:";
$millas = trim ( fgets ( STDIN ));
echo " ¿Cuántos pies ?:";
$pies = trim ( fgets ( STDIN ));
echo " ¿Cuántas pulgadas ?:";
$pulgadas = trim ( fgets ( STDIN ));
$metros = 1609.344 * $millas + 0.3048 * $pies + 0.0254 * $pulgadas ;
echo "La longitud es de " . $metros . " metros " ;
? >
PHP Parse error: syntax error, unexpected token “?”, expecting end of file in D:_10_18.php on line 18
En la sección anterior hicimos hincapié en la necesidad de documentar todo el proceso de desarrollo. En este ejemplo la documentación completa del proceso lo constituye todo lo escrito en esta sección. Al entregar un ejercicio, se deberá presentar el desarrollo completo con todas las etapas, desde el análisis hasta las pruebas (y el mantenimiento, si hubo cambios).
Utilizamos nombres significativos para denominar archivos de programas, para denominar variables, constantes y funciones. Todos esos nombres se denominan identificadores y PHP tiene reglas sobre qué es un identificador válido y qué no lo es. Un identificador de una variable comienza con el símbolo $ y luego sigue con una secuencia de letras, números y guiones bajos. Los espacios no están permitidos en el nombre.
Los siguientes son ejemplos de identificadores válidos:
PHP distingue mayúsculas de minúsculas (en inglés case sensitive), así que Hola es identificador y hola es otro identificador. Los siguientes son todos identificadores inválidos en PHP:
PHP reserva palabras para describir estructura del programa, y no permite que esas palabras se utilicen como identificadores. Cuando en un programa nos encontramos con que un nombre no es admitido pese a que su formato es válido, seguramente se trata de una de las palabras de la tabla mostrada a continuación, a la que denominaremos palabras reservadas de PHP.
| __halt_compiler() | abstract | and | array() | as |
| break | callable | case | catch | class |
| clone | const | continue | declare | default |
| die() | do | echo | else | elseif |
| empty() | enddeclare | endfor | endforeach | endif |
| endswitch | endwhile | eval() | exit() | extends |
| final | finally | fn (as of PHP 7.4) | for | foreach |
| function | global | goto | if | implements |
| include | include_once | instanceof | insteadof | interface |
| isset() | list() | match (as of PHP 8.0) | namespace | new |
| or | private | protected | public | |
| readonly (as of PHP 8.1.0) * | require | require_once | return | static |
| switch | throw | trait | try | unset() |
| use | var | while | xor | yield |
| yield from |
En PHP las variables adquieren un tipo a partir de su asignación. Las variables pueden almacenar datos de un tipo primitivo (o un tipo clase ), y su valor puede cambiar durante la ejecución del programa tantas veces como sea necesario, además pueden aplicarse ciertos operaciones dependiendo del tipo de las variables.
Convención: las variables comienzan con minúsculas y las constantes van todas en mayúsculas.
Ejemplos de identificadores de variables: miNombre, jugadoresDeFutball, juan, notaFinal, promedio.
Ejemplos de identificadores de constantes: VALOR_PI, TASA_ANUAL, INCREMENTO
En programación, una convención de nombres es un conjunto de reglas para la elección de la secuencia de caracteres que se utilice para identificadores que denoten variables, tipos, funciones y otras entidades en el código fuente y la documentación.
Algunas de las razones para utilizar una convención de nombres (en lugar de permitir a los programadores elegir cualquier secuencia de caracteres) son:
reducir el esfuerzo necesario para leer y entender el código fuente;
mejorar la apariencia del código fuente (por ejemplo, al no permitir nombres excesivamente largos o abreviaturas poco claras).
Convención: Para definir variables cuyos nombres son compuestos utilizaremos la notación infixCaps, la cual permite yuxtaponer dos palabras, comenzando la segunda palabra con su inicial en mayúscula.
PHP es un lenguaje Case Sensitive, es decir que es sensible a las minúsculas y mayúsculas. En pocas palabras, para PHP la variable contador es distinta a la variable Contador.
En PHP las constantes son variables que a las que se les aplica el modificador CONST. El valor de una variable declarada como final no puede cambiar durante la ejecución de un programa.
Ejemplo:
CONST $pi = 3.14159;
CONST $pi = 3.14159;
Un tipo de datos define el conjunto de valores que puede tomar una variable y qué operaciones se pueden realizar con ella (comportamiento). El tipo de dato de una variable define cuáles son los valores que se pueden almacenar en la variable, por ejemplo en el caso de los números: enteros, reales, etc. Si una variable es de tipo entero, sólo podrá almacenar números enteros y no así reales, y tendrá definidas ciertas operaciones para manipular dichos valores. En cambio una variable de tipo real podrá almacenar un número entero, pues los enteros también son reales, y tendrá definido un conjunto de operaciones que podrán aplicarse.
Los tipos de datos primitivos definidos por el lenguaje de programación son atómicos, es decir que permiten almacenar un solo valor en cada variable.
| Grupo | Tipo de Datos | Descripción |
|---|---|---|
| REAL ENTERO LOGICO CARACTER TEXTO |
float integer boolean string string |
Son números que tienen punto flotante, es decir tienen
decimales. Son números que no tienen parte decimal. Solo pueden tomar dos valores true o false. Letras, números, símbolos especiales que van entre comillas simples Son cadenas de caracteres. |
Existen lenguajes que obligan al programador a declarar de qué tipo de dato serán las variables al momento de especificar el algoritmo. En este caso se habla de lenguajes con tipos estáticos, ya que se determina el tipo de todas las expresiones antes de la ejecución del programa (típicamente al compilar). Este es el caso de lenguajes como Pascal, Java, C, C++.
En Lenguajes como PHP, Python, JavaScript, el programador no debe declarar el tipo de las variables, ya que el tipo se establece durante la ejecución del programa. En este caso se habla de lenguajes con tipos dinámicos. En estos lenguajes una variable puede asumir distintos tipos durante la ejecución del programa, pero lo recomendado para que el código fuente se pueda interpretar, es tratar de mantener el tipo de las variables asignándoles expresiones cuyo resultado sea del tipo de la variable
Los tipos de datos del lenguaje PHP se pueden consultar en: http://php.net/manual/es/language.types.intro.php
Los operadores son símbolos que representan algún tipo de operación sobre dos operandos (salvo los operadores unarios que actúan sobre un solo operando) y arrojan un resultado. Se deben considerar los tipos de los operandos para determinar cuales operadores son aplicables. Por ejemplo que si los operandos son números el operador deberá ser un operador aritmético.
En PHP existen varios tipos de operadores, los cuales representan operaciones que se realizan sobre operandos, y son listados en la siguiente Tabla:
| Tipo de Operadores | Aritméticos | Relacionales | Lógicos |
|---|---|---|---|
| Operadores | * Multiplicación \(\backslash\) División % Módulo-Residuo + Adición - Diferencia |
\(>\) mayor que \(<\) menor que \(>=\) mayor igual que \(<=\) menor igual que \(==\) igual a (comparación) \(!=\) distinto a |
&& and \(\|\) or \(\wedge\) xor ! not |
Una expresión es todo aquello que se puede evaluar, es decir que lanza un resultado. Las siguientes son expresiones:
Considerando los tipos de operadores, podemos decir que existen expresiones de tipo aritméticas, relacionales y lógicas, es decir expresiones que al ser evaluadas retornan un resultado de un cierto tipo. En cada caso tanto los operadores como los operandos deben ser compatibles, de lo contrario no se podría evaluar. Por ejemplo si intentamos sumar dos valores que no son numéricos, esta sería una expresión incorrecta que no se podría evaluar.
El operador de asignación es aquel que permite que la evaluación de una expresión se almacene en una variable. El tipo de la expresión debe ser de tipo compatible con el tipo de la variable. Se representa con el símbolo de igualdad ‘=’, pero no se debe confundir con el operador de comparación (en PHP ‘==’).
Al hablar de entrada y salida nos referimos al ingreso de datos por parte del usuario y salida de la computadora por ejemplo en la pantalla al usuario.
La siguiente tabla describe ejemplos de entrada y salida de variables de distinto tipo:
| Primitiva Pseudocódigo | PHP |
|---|---|
| Entrada: Mostrar mensajes por pantalla ESCRIBIR() |
echo |
| Salida: Leer datos del usuario LEER() |
trim(fgets(STDIN)) |
ALGORITMO saludo() RETORNA ∅
(* alg. que saluda a amigos *)
ESCRIBIR(" Hola amigos !")
ESCRIBIR(" Estoy programando en PHP")
FIN ALGORITMO saludo
<?php
/* Alg. que saluda a amigos */
echo " Hola amigos !";
echo " Estoy programando en PHP";
?>
## Hola amigos ! Estoy programando en PHP
ALGORITMO saludo() RETORNA ∅
(* alg. que saluda a amigos *)
ESCRIBIR(" Hola amigos !") (* con salto *)
ESCRIBIR(" Estoy programando en PHP")
FIN ALGORITMO saludo
<?php
/* Alg. que saluda a amigos */
echo " Hola amigos ! \n";
echo " Estoy programando en PHP";
?>
## Hola amigos !
## Estoy programando en PHP
ALGORITMO saludo() RETORNA ∅
(* alg. que lee un nombre y lo saluda *)
TEXTO nombre
ESCRIBIR("Ingrese un nombre")
LEER(nombre)
ESCRIBIR(" Hola" + nombre + "!")
ESCRIBIR(" Estoy programando en PHP")
FIN ALGORITMO saludo
<?php
/* Alg. que lee un nombre y lo saluda
STRING $nombre
*/
echo " Ingrese un nombre : \n" ;
$nombre = trim(fgets(STDIN));
echo " Hola ". $nombre ."!";
echo " Estoy programando en PHP";
?>
## Ingrese un nombre:
## Ana
## Hola Ana !
## Estoy programando en PHP";
Una expresión es una porción de código PHP que produce o calcula un valor (resultado).
Un valor es una expresión (de hecho es la expresión más sencilla). Por ejemplo el resultado de la expresión 111 es precisamente el n´umero 111.
Una variable es una expresión, y el valor que produce es el que tiene asociado en el estado (si x ← 5 en el estado, entonces el resultado de la expresión x es el número 5).
Usamos operaciones para combinar expresiones y construir expresiones más complejas:
Si x tiene asignado el valor 5 , x + 1 es una expresión cuyo resultado es 6.
Si en el estado millas ← 1, pies ← 0 y pulgadas ← 0, entonces 1609.344 * millas + 0.3048 * pies + 0.0254
pulgadas es una expresión cuyo resultado es 1609.344.
Se pueden usar paréntesis para indicar un orden de evaluación: ((b * b) - (4 * a * c)) / ( x / y)
Igual que en la matemática, si no hay paréntesis en la expresión primero se agrupan las exponenciaciones, luego los productos y cocientes, y luego las sumas y restas.
Si x e y son n´umeros enteros, entonces x % y se calcula como el resto de la división entera entre x e y: Si x se refiere al valor 12 e y se refiere al valor 9 entonces x % y se refiere al valor 3.
Los números pueden ser tanto enteros (111, -24), como reales (12.5, 12.0, -12.5). Dentro de la computadora se representan de manera diferente, y se comportan de manera diferente frente a las operaciones.
Conocemos también dos expresiones muy particulares:
trim(fgets(STDIN)) devuelve el valor ingresado por teclado tal como se lo digita
echo visualiza las salidas de la aplicación.
Ejercicio A: Aplicando las reglas matemáticas de asociatividad, decidir cuáles de las siguientes expresiones son iguales entre sí:
Ejercicio B. Implementar en PHP un algoritmo que realice lo siguiente: darle a a, b y c los valores 10, 100 y 1000 respectivamente y evaluar las expresiones del ejercicio anterior.
Ejercicio C. Implementar en PHP un algoritmo que realice lo siguiente: darle a a, b y c los valores 10.0, 100.0 y 1000.0 respectivamente y evaluar las expresiones del punto anterior.
Todo programa tiene una parte principal que dirige el funcionamiento del mismo. Utilizaremos el siguiente esquema general para definir todos nuestros programas.
ALGORITMO calcularPerimetro() RETORNA ∅
(*alg. que lee datos de un rectangulo,
valores enteros mayores a 0, calc. perimetro *)
REAL ladoMenor, ladoMayor, perimetro
ESCRIBIR(”Ingrese el valor del lado menor”)
LEER(ladoMenor)
ESCRIBIR(”Ingrese el valor del lado mayor”)
LEER(ladoMayor)
perimetro ← 2*ladoMenor + 2* ladoMayor
ESCRIBIR(”El perímetro del rectángulo de
lados”+ ladoMenor+” y ”+ladoMayor+
” es”+perimetro)
FIN ALGORITMO calcularPerimetro
<?php
/* variables: FLOAT $ladoMenor, $ladoMayor, $perimetro */
echo "Calcula el perímetro de un rectángulo";
echo "Ingrese el valor del lado menor";
/*leer lo que ingresa el usuario*/
$ladoMenor = trim(fgets(STDIN));
echo "Ingrese el valor del lado mayor"
/*leer lo que ingresa el usuario*/
$ladoMayor = trim(fgets(STDIN));
$perimetro = 2 * $ladoMenor + 2 * $ladoMayor;
echo "El perímetro de lados ".$ladoMenor.
"es"."$perimetro"
?>
PHP Parse error: syntax error, unexpected variable “$ladoMayor”, expecting “,” or “;” in D:_10_18.php on line 11
No sólo tendremos expresiones numéricas en un programa PHP. Por ejemplo, veamos el siguiente programa para saludar amigos:
ALGORITMO saludo() RETORNA ∅
(* alg. que saluda a un amigo *)
TEXTO nombre
LEER(nombre)
ESCRIBIR(" Hola " + nombre + "!")
ESCRIBIR(" Estoy programando en PHP.")
FIN ALGORITMO saludo
<?php
/* Alg. que saluda a un amigo
String $alguien */
echo " Ingrese su nombre : " ;
$alguien = trim ( fgets ( STDIN ));
echo " Hola " . $alguien . "!" ;
echo " Estoy programando en PHP." ;
? >
## PHP Parse error: syntax error, unexpected token "?", expecting end of file in D:\backup2023_10_18\ip\dummy.php on line 10
La variable $alguien queda asociada a un valor ingresado por el usuario, en este caso el usuario ingresará una cadena de caracteres (letras, dígitos, símbolos, etc.), Por ejemplo “Ana”.
Utilicemos el programa anterior y fijemos el nombre de la persona para ejemplificar las reglas de forman expresiones:
ALGORITMO saludo() RETORNA ∅
(* alg. que saluda a Ana *)
TEXTO nombre
nombre <- "Ana"
ESCRIBIR(" Hola " + nombre + "!")
ESCRIBIR(" Estoy programando en PHP.")
FIN ALGORITMO saludo
<?php
/* Saludar a Ana
String $nombre */
$nombre = "Ana";
echo " Hola " . $nombre . "!" ;
echo " Estoy programando en PHP." ;
?>
## Hola Ana! Estoy programando en PHP.
(Observación: PHP usa también una notación con comillas simples para referirse a las cadenas de caracteres, y hablar de ’Ana’.) Como en la sección anterior, podemos enumerar las reglas que forman expresiones con caracteres:
Las instrucciones son las órdenes que entiende PHP. Ya hemos usado varias instrucciones: