Usuario:Djgar98/PHP syntax and semantics

De Wikipedia, la enciclopedia libre

La sintaxis y la semántica de PHP son el formato ( sintaxis ) y los significados relacionados ( semántica ) texto y símbolos en el lenguaje de programación PHP . Forman un conjunto de reglas que definen cómo se puede escribir e interpretar un programa PHP.

Visión general[editar]

Históricamente, el desarrollo de PHP ha sido un tanto desordenado. Para contrarrestar esto, el PHP Framework Interop Group (FIG) ha creado los documentos de la Recomendación de Normas PHP (PSR) que han ayudado a traer más estandarización al lenguaje desde 2009. [1]​ Los estándares de codificación modernos están contenidos en PSR-1 (Basic Coding Standard) y PSR-2 (Basic Style Guide).

Conceptos básicos del lenguaje[editar]

PHP generalmente sigue la sintaxis de C, con excepciones y mejoras para su uso principal en el desarrollo web, que hace un uso intensivo de la manipulación de cadenas de texto . Las variables PHP deben tener el prefijo "$". Esto permite que PHP realice una interpolación de cadenas en cadenas con comillas dobles, donde la barra invertida se admite como un carácter de escape . No se realizan escapes ni interpolaciones en cadenas delimitadas por comillas simples . PHP también admite una función sprintf parecida a a del lenguaje C. El código se puede modularizar en funciones definidas con la palabra clave function. PHP admite un estilo de codificación orientado a objetos opcional, con clases denotadas por la palabra clave class . Las funciones definidas dentro de las clases por lo general son llamados métodos . Las estructuras de control incluyen: if, while, do/while, for, foreach y switch. Las sentencias terminan en punto y coma, no en terminaciones de línea. [2]

Delimitadores[editar]

El procesador PHP solo analiza el código dentro de sus delimitadores . Cualquier cosa fuera de sus delimitadores se envía directamente a la salida sin ser analizado por PHP. Los únicos delimitadores de apertura/cierre permitidos por PSR-1 [3]​ son " <?php " y " ?> " O <?= Y ? > . En los archivos que contienen solo PHP, se debe omitir la etiqueta de cierre.

El propósito delos delimitadores es separar el código PHP de cualquier otro tipo de dato (principalmente HTML). Aunque es raro en la práctica, PHP ejecutará código incrustado en cualquier archivo que se pase a su intérprete, incluidos archivos binarios como archivos PDF o JPEG, o en archivos de registro del servidor. [4][5]​ El analizador PHP ignora todo lo que esté fuera de los delimitadores y lo pasa como salida. [6]

Estos delimitadores recomendados crean XHTML y otros documentos XML correctamente formados. [7]​ Esto puede ser útil si los documentos del código fuente alguna vez necesitan ser procesados de otras maneras durante la vida del software.

Si la validación adecuada de XML no es un problema, y un archivo contiene solo código PHP, es preferible omitir la etiqueta de cierre de PHP ( ?> ) Al final del archivo. [8]

Etiquetas no recomendadas[editar]

Se pueden usar otros delimitadores en algunos servidores, aunque la mayoría ya no son compatibles. [9]​ Por ejemplo:

  • " <script language="php"> " y " </script> " (eliminado en PHP7)
  • Etiquetas de apertura cortas ( <? ) (Configuradas con la short_open_tag ini short_open_tag )
    • Una variante de la etiqueta <? es <?=, que automáticamente repite la siguiente sentencia. Antes de PHP 5.4.0, esto también se controlaba con short_open_tag, pero sigue disponible en versiones posteriores.
  • Etiquetas de estilo ASP ( <% o <%= ) (eliminadas en PHP7)

Estructuras de Control[editar]

Sentencias condicionales[editar]

La sintaxis en PHP de la instrucción If ... else es la siguiente:

<?php
if (condition) {
  // Código;
} elseif (condition2) {
  // Código;
} else {
  // Código;
}
?>

Para sentencias individuales, los corchetes pueden omitirse y la sentencia if preferiblemente condensado en una sola linea

<?php
if (condition) hacerEsto();
elseif (condition2) hacerOtraCosa();
else hacerAlgoDiferente();
?>
Switch[editar]

Un ejemplo de la sintaxis de un switch en PHP seria:

<?php
switch (expr) {
  case 0:
   // Código;
   break;
  case 1:
   // Código;
   break;
  case 2:
   // Código;
   break;
  default:
   // Código;
}
?>

Nótece que, a diferencia del lenguaje C, los tipos de datos en la declaración case pueden ser de cualquier tipo, no solo integers. [10]

Bucle[editar]

Bucle for[editar]

La sintaxis PHP de un bucle for es la siguiente:

<?php
for (inicializacion; condición; incremento) {
  // Código;
}
?>
Bucle For each[editar]
Bucle while[editar]

La sintaxis de PHP para un bucle while es la siguiente:

<?php
while (condition) {
  // Código;
}
?>
Bucle do while[editar]

La sintaxis en PHP para el ciclo do while es la siguiente:

<?php
do {
  // Código;
} while (condición);
?>

Variables y comentarios[editar]

Las variables tienen como prefijo un símbolo de dólar y no es necesario especificar un tipo de antemano. A diferencia de los nombres de funciones y clases, los nombres de las variables distinguen entre mayúsculas y minúsculas. Las cadenas de comillas dobles ( "" ) y heredoc permiten incrustar el valor de una variable en la cadena. [11]​ Al igual que en lenguaje C, las variables pueden ser transformadas a un tipo específico prefijando el tipo entre paréntesis. PHP trata un salto de linea como espacios en blanco, a manera de lenguaje de forma libre . El operador de concatenación es el punto (.). Los elementos de una matriz pueden ser manipulados por corchetes tanto en las matrices asociativas como en las matrices indexadas. Las llaves se pueden usar para acceder a los elementos de la matriz, pero no para asignar.

PHP tiene tres tipos de sintaxis de comentarios : /* */ que sirve como comentarios de bloque, y // así como # que se usan para comentarios de línea. [12]​ Muchos ejemplos usan la función print en lugar de la función de echo . Ambas funciones son casi idénticas; La principal diferencia es que print es más lenta que echo porque la primera devolverá un estado que indica si tuvo éxito o no, además del texto a la salida, mientras que la segunda no devuelve un estado y solo devuelve el texto para la salida. [13]

El ejemplo de código habitual de " Hola Mundo " para PHP es: [14]

<?php
echo "Hello World!\n";
?>

El ejemplo anterior imprime lo siguiente:

Hello World!

En lugar de usar <?php y la declaración echo, un "atajo" opcional es el uso de <?= en lugar de <?php que implícitamente realiza la funcion echo. Por ejemplo, para mostrar el título de la página:

<!DOCTYPE html>
<html>
  <head>
    <title><?=$page_title; ?></title>
  </head>
  <body>
    <p>Hello World!</p>
  </body>
</html>

EL ejemplo anterior tambien muestra que el texto no contenido dentro de las etiquetas PHP adjuntas se generará directamente. Así que la manera más simple de un Hola Mundo en PHP es in archivo de texto que contenga "Hola Mundo"

Sintaxis alterna para estructuras de control.[editar]

PHP ofrece una sintaxis alternativa usando dos puntos (:) en lugar de la sintaxis estándar de llaves (de "{. . . } "). Esta sintaxis afecta las siguientes estructuras de control: if, while, for, foreach y switch. La sintaxis varía solo ligeramente de la sintaxis de llaves. En cada caso, la llave de apertura ({) se reemplaza con dos puntos (:) y la llave de cierre se reemplaza con endif ;, endwhile ;, endfor ;, endforeach ;, o endswitch ;, respectivamente. [15]​ No se admite mezclar estilos de sintaxis dentro del mismo bloque de control. Un ejemplo de la sintaxis para una instrucción if / elseif es la siguiente:

<?php
if (condición):
   // Código
elseif (condición):
   // Código
else:
   // Código
endif;
?>

Este estilo a veces se llama sintaxis de plantilla, ya que a menudo se encuentra más fácil de leer cuando se combina PHP y HTML o JavaScript para la salida condicional:

<html>
<?php if ($day == 'Thursday'): ?>
 <div>Tomorrow is Friday!</div>
<?php elseif ($day == 'Friday'): ?>
 <div>TGIF</div>
<?php else: ?>
 <div>ugh</div>
<?php endif; ?>
</html>

Tipos de datos[editar]

PHP almacena números enteros en un rango dependiente de la plataforma. Este rango es típicamente el de enteros de 32 bits. Las variables integer se pueden asignar utilizando notaciones decimales (positivas y negativas), octales y hexadecimales . Los números reales también se almacenan en un rango específico de la plataforma. Se pueden especificar utilizando la notación de coma flotante o dos formas de notación científica . [16]

PHP tiene un tipo booleano nativo, llamado "boolean", similar a los tipos booleanos nativos en Java y C ++ . Usando las reglas de conversión de tipo booleano, los valores distintos de cero se interpretan como verdaderos y cero como falsos, como en Perl. [16]

El tipo de datos null representa una variable que no tiene valor. El único valor en el tipo de datos null es NULL . [16]​ Las variables del tipo "resource" representan referencias a recursos de fuentes externas. Por lo general, estos son creados por funciones de una extensión particular, y solo pueden ser procesados por funciones de la misma extensión. Los ejemplos incluyen recursos de archivos, imágenes y bases de datos.

Las matrices pueden contener elementos mixtos de cualquier tipo, incluidos recursos y objetos. Las matrices multidimensionales se crean asignando matrices como elementos de la matriz. PHP no tiene un tipo de matriz verdadero. Las matrices PHP son nativamente dispersas y asociativas . Las matrices indexadas son simplemente hashes que usan números enteros como claves. Los objetos se pueden usar sintácticamente como matrices . [16]

Funciones[editar]

PHP tiene cientos de funciones básicas y miles más de extensiones. Antes de PHP 5.3.0, las funciones no son funciones de primera clase y solo pueden ser referenciadas por su nombre, mientras que PHP 5.3.0 introduce cierres. [17]​ Las funciones definidas por el usuario se pueden crear en cualquier momento y sin prototipos. Las funciones se pueden definir dentro de los bloques de código, lo que permite una decisión en tiempo de ejecución en cuanto a si se debe definir o no una función. No existe un concepto de funciones locales. Las llamadas a funciones deben usar paréntesis a exceptuando a los constructores de clase sin argumentos llamadas con el operador new de PHP, en donde los paréntesis son opcionales.

Un ejemplo de la definición de una función es el siguiente:

<?php
function hola($var='World')
{
  echo "Hola $var!\n";
}

hola(); // imprime "Holal Mundo!"
hola('Wikipedia'); // imprime "Hola Wikipedia!"
?>

PHP soporta funciones anónimas puras a partir de la versión 5.3. [17]​ En versiones anteriores, PHP solo admitía funciones casi anónimas a través de la función create_function() . Las llamadas a funciones pueden realizarse a través de variables, donde el valor de una variable contiene el nombre de la función a llamar. Esto se ilustra en el siguiente ejemplo:

<?php
function hola()
{
  return 'Hola';
}

function mundo()
{
  return "Mundo!";
}

$funcion1 = 'hola';
$funcion2 = 'mundo';

echo "{$funcion1()} {$funcion2()}";
?>

Se puede asignar un valor por defecto para los parámetros en la definición de la función, pero PHP no admite parámetros con nombre ni omisión de parámetros. [18]​ Algunos de los principales desarrolladores de PHP han expresado públicamente su decepción con esta decisión. [19]​ Otros han sugerido soluciones alternas para esta limitación. [20]

Objetos[editar]

La funcionalidad básica de programación orientada a objetos se agregó en PHP 3. [21]​ El manejo de objetos fue completamente reescrito para PHP 5, expandiendo el conjunto de características y mejorando el rendimiento. En versiones anteriores de PHP, los objetos se manejaban como tipos primitivos . [22]​ El inconveniente de este método fue que todo el objeto era copiado cuando se asignaba una variable o se pasaba como parámetro a un método. En el nuevo enfoque, se hace referencia a los objetos por identificador y no por valor. PHP 5 introdujo variables y métodos miembros privados y protegidos, junto con clases abstractas y clases finales, así como métodos abstractos y métodos finales . También introdujo una forma estándar de declarar constructores y destructores, similar a la de otros lenguajes orientados a objetos como C ++, y un modelo estándar de manejo de excepciones . Además, PHP 5 agregó interfaces y permite la implementación de múltiples interfaces. Hay interfaces especiales que permiten que los objetos interactúen con el sistema de tiempo de ejecución. Los objetos que implementan ArrayAccess se pueden usar con sintaxis de matriz y los objetos que implementan Iterator o IteratorAggregate se pueden usar con la estructura de control foreach. El método estático y las caracteristicas de la variable de tipo class en Zend Engine 2 no funcionan de la manera que algunos esperarían. No hay una función de tablas virtuales en el gestor, por lo que las variables estáticas se enlazan con un nombre en lugar de una referencia en tiempo de compilación. [23]

Este ejemplo muestra cómo definir una clase, foo, que hereda de la clase bar. La función mystaticfunc es una función estática pública que se puede llamar con foo :: mystaticfunc (); .

class Foo extends Bar
{
  function __construct()
  {
    $doo = "wah deeh dee";
  }

  public static function myStaticMethod()
  {
    $dee = "dee deeh dum";
  }
}

Si el desarrollador crea una copia de un objeto usando la palabra reservada clone, el motor Zend verificará si se ha definido o no un método __clone() . De lo contrario, llamará a un __clone() predeterminado que copiará las propiedades del objeto. Si se define un método __clone(), será responsable de establecer las propiedades necesarias en el objeto creado. Por comodidad, el gestor proporcionará una función que importe las propiedades del objeto fuente, de modo que el programador pueda comenzar con una réplica por valor del objeto fuente y solo anular las propiedades que necesitan ser cambiadas. [24]

Ver también[editar]

Referencias[editar]

  1. PSR-Huh?
  2. «Instruction separation». The PHP Group. Consultado el 16 de marzo de 2008. 
  3. http://www.php-fig.org/psr/psr-1/
  4. «Code injection – a simple PHP virus carried in a JPEG image». 
  5. «The Hacker's Handbook: The Strategy Behind Breaking into and Defending Networks». 
  6. «Your first PHP-enabled page». The PHP Group. Consultado el 25 de febrero de 2008. 
  7. Bray, Tim (26 November 2008). «Processing Instructions». Extensible Markup Language (XML) 1.0 (Fifth Edition). W3C. Consultado el 18 de junio de 2009. 
  8. «PHP tags». 
  9. «PHP: Basic syntax». The PHP Group. Consultado el 22 de febrero de 2008. 
  10. http://php.net/manual/en/control-structures.switch.php
  11. «Variables». The PHP Group. Consultado el 16 de marzo de 2008. 
  12. «Comments». The PHP Group. Consultado el 16 de marzo de 2008. 
  13. «print». The PHP Group. Consultado el 16 de marzo de 2008. 
  14. «Hello World». Code Newbie. Consultado el 25 de febrero de 2008. 
  15. «Alternative syntax for control structures». The PHP Group. Consultado el 16 de abril de 2010. 
  16. a b c d «Types». The PHP Group. Consultado el 16 de marzo de 2008. 
  17. a b «Functions». The PHP Group. Consultado el 16 de marzo de 2008. 
  18. «PHP 6 Dropped Items». The PHP Group. Consultado el 9 de enero de 2009. 
  19. «Syntax I Miss in PHP». Stanislav Malyshev, Zend Technologies, Ltd. Consultado el 9 de enero de 2009. 
  20. «PHP Skipped and Named Parameters». SEO Egghead Inc. Consultado el 9 de enero de 2009. 
  21. «History of PHP and related projects». The PHP Group. Consultado el 25 de febrero de 2008. 
  22. «PHP 5 Object References». mjtsai. Consultado el 16 de marzo de 2008. 
  23. «Classes and Objects (PHP 5)». The PHP Group. Consultado el 16 de marzo de 2008. 
  24. «Object cloning». The PHP Group. Consultado el 16 de marzo de 2008. 

[[Categoría:Software programado en PHP]] [[Categoría:Wikipedia:Páginas con traducciones sin revisar]]