Saltar al contenido

Errores de sintaxis / análisis de PHP; y como solucionarlos

Bienvenido a nuestra página, ahora vas a encontrar la solucíon a lo que buscabas.

Solución:

¿Cuáles son los errores de sintaxis?

PHP pertenece al estilo C y a los lenguajes de programación imperativos. Tiene reglas gramaticales rígidas, de las que no puede recuperarse cuando encuentra símbolos o identificadores fuera de lugar. No puede adivinar sus intenciones de codificación.

Resumen de sintaxis de definición de función

Consejos más importantes

Hay algunas precauciones básicas que siempre puede tomar:

  • Utilice correctamente sangría de código, o adoptar cualquier estilo de codificación elevado. La legibilidad evita irregularidades.

  • Utilice un IDE o editor para PHP con resaltado de sintaxis. Lo que también ayuda con el equilibrio entre paréntesis / corchetes.

    Esperado: punto y coma

  • Lea la referencia del idioma y los ejemplos en el manual. Dos veces, para volverse algo competente.

Cómo interpretar los errores del analizador

Un mensaje de error de sintaxis típico dice:

Error de análisis: error de sintaxis, inesperado T_STRING, esperando ; en file.php sobre línea217

Que enumera los posible ubicación de un error de sintaxis. Ver lo mencionado nombre del archivo y número de línea.

Un apodo como T_STRING explica qué símbolo no pudo procesar el analizador / tokenizador finalmente. Sin embargo, esta no es necesariamente la causa del error de sintaxis.

Es importante investigar líneas de código anteriores así como. A menudo, los errores de sintaxis son solo contratiempos que ocurrieron antes. El número de línea de error es justo donde el analizador se rindió de manera concluyente para procesarlo todo.

Resolver errores de sintaxis

Hay muchos enfoques para reducir y corregir problemas de sintaxis.

  • Abra el archivo fuente mencionado. Mira lo mencionado línea de código.

    • En el caso de cadenas fuera de control y operadores fuera de lugar, suele ser aquí donde se encuentra al culpable.

    • Lea la línea de izquierda a derecha e imagine lo que hace cada símbolo.

  • Más regularmente necesitas mirar líneas precedentes así como.

    • En particular, falta ; faltan puntos y comas en los extremos de la línea anterior / declaración. (Al menos desde el punto de vista estilístico).

    • Si bloques de código están cerrados o anidados incorrectamente, es posible que deba investigar aún más el código fuente. Utilice correctamente sangría de código para simplificar eso.

  • Mira el coloración de sintaxis!

    • Las cadenas, las variables y las constantes deben tener colores diferentes.

    • Operadores +-*/. también debe teñirse de forma distinta. De lo contrario, podrían estar en el contexto equivocado.

    • Si tú ves string la coloración se extiende demasiado lejos o demasiado corto, entonces ha encontrado un cierre sin escape o faltante " o ' string marcador.

    • Tener dos caracteres de puntuación del mismo color uno al lado del otro también puede significar problemas. Por lo general, los operadores están solos si no ++, --o paréntesis que siguen a un operador. Dos cadenas / identificadores que se siguen directamente entre sí son incorrectos en la mayoría de los contextos.

  • El espacio en blanco es tu amigo. Seguir alguna estilo de codificación.

  • Romper las filas largas temporalmente.

    • Puedes libremente agregar nuevas líneas entre operadores o constantes y cadenas. El analizador luego concretará el número de línea para analizar los errores. En lugar de mirar el código muy extenso, puede aislar el símbolo de sintaxis que falta o que está fuera de lugar.

    • Complejo dividido if declaraciones en distintas o anidadas if condiciones.

    • En lugar de largas fórmulas matemáticas o cadenas lógicas, utilice variables temporales para simplificar el código. (Más legible = menos errores).

    • Agregar nuevas líneas entre:

      1. El código que puede identificar fácilmente como correcto,
      2. Las partes de las que no estás seguro
      3. Y las líneas de las que se queja el analizador.

      Partición de bloques de código largos De Verdad ayuda a localizar el origen de los errores de sintaxis.

  • Comentar código infractor.

    • Si no puede aislar la fuente del problema, comience a comentar (y así eliminar temporalmente) bloques de código.

    • Tan pronto como se deshizo del error de análisis, habrá encontrado la fuente del problema. Mire más de cerca allí.

    • A veces, desea eliminar temporalmente bloques completos de funciones / métodos. (En caso de llaves no coincidentes y código con sangría incorrecta).

    • Cuando no pueda resolver el problema de sintaxis, intente volver a escribir las secciones comentadas desde cero.

  • Como recién llegado, evite algunas de las confusas construcciones de sintaxis.

    • El ternario ? : El operador de condición puede compactar el código y es realmente útil. Pero no ayuda a la legibilidad en todos los casos. Prefiero llanura if declaraciones mientras no se habla.

    • Sintaxis alternativa de PHP (if:/elseif:/endif;) es común para las plantillas, pero podría decirse que es menos fácil de seguir de lo normal código bloques.

  • Los errores más frecuentes de los recién llegados son:

    • Falta un punto y coma ; para terminar declaraciones / líneas.

    • No coincidente string cotizaciones para " o ' y comillas sin escape en el interior.

    • Operadores olvidados, en particular para el string . concatenación.

    • Desequilibrado ( paréntesis ). Cuéntelos en la línea informada. ¿Hay un número igual de ellos?

  • No olvide que resolver un problema de sintaxis puede revelar el siguiente.

    • Si hace que un problema desaparezca, pero otros surgen en algún código a continuación, en su mayoría está en el camino correcto.

    • Si después de editar un nuevo error de sintaxis aparece en la misma línea, entonces su intento de cambio fue posiblemente un error. (Aunque no siempre)

  • Restaure una copia de seguridad del código que funcionaba anteriormente, si no puede solucionarlo.

    • Adopte un sistema de control de versiones del código fuente. Siempre puedes ver un diff de la versión rota y última en funcionamiento. Lo que podría ser esclarecedor en cuanto a cuál es el problema de sintaxis.
  • Caracteres Unicode perdidos invisibles: En algunos casos, debe utilizar un editor hexadecimal o un editor / visor diferente en su fuente. Algunos problemas no se pueden encontrar con solo mirar su código.

    • Tratar grep --color -P -n "[x80-xFF]" file.php como la primera medida para encontrar símbolos no ASCII.

    • En particular, las listas de materiales, los espacios de ancho cero o los espacios sin interrupción y las comillas tipográficas pueden encontrar su camino en el código fuente.

  • Cuida de cual tipo de saltos de línea se guardan en archivos.

    • PHP solo honra norte nuevas líneas, no r retornos de carro.

    • Lo que ocasionalmente es un problema para los usuarios de MacOS (incluso en OS X para editores mal configurados).

    • A menudo, solo surge como un problema cuando una sola línea // o # se utilizan comentarios. Multilínea /*...*/ los comentarios rara vez molestan al analizador cuando se ignoran los saltos de línea.

  • Si tu el error de sintaxis no se transmite a través de la web: Sucede que tiene un error de sintaxis en su máquina. Pero publicar el mismo archivo en línea ya no lo muestra. Lo que solo puede significar una de dos cosas:

    • ¡Está viendo el archivo incorrecto!

    • O su código contenía Unicode perdido invisible (ver arriba). Puede averiguarlo fácilmente: simplemente copie su código desde el formulario web a su editor de texto.

  • Revisar su Versión PHP. No todas las construcciones de sintaxis están disponibles en todos los servidores.

    • php -v para el intérprete de línea de comandos

    • para el invocado a través del servidor web.

    Esos no son necesariamente los mismos. En particular, cuando trabaje con marcos, los hará coincidir.

  • No utilice las palabras clave reservadas de PHP como identificadores de funciones / métodos, clases o constantes.

  • La prueba y error es su último recurso.

Si todo lo demás falla, siempre puedes Google su mensaje de error. Los símbolos de sintaxis no son tan fáciles de buscar (sin embargo, el propio Stack Overflow está indexado por SymbolHound). Por lo tanto, es posible que tenga que mirar algunas páginas más antes de encontrar algo relevante.

Más guías:

  • Conceptos básicos de depuración de PHP por David Sklar
  • Corregir errores de PHP por Jason McCreary
  • Errores de PHP: 10 errores comunes por Mario Lurig
  • Errores y soluciones comunes de PHP
  • Cómo solucionar problemas y arreglar su sitio web de WordPress
  • Una guía de mensajes de error de PHP para diseñadores - Revista Smashing

Pantalla blanca de la muerte

Si su sitio web está en blanco, la causa suele ser un error de sintaxis. Habilite su visualización con:

  • error_reporting = E_ALL
  • display_errors = 1

En tus php.ini en general, oa través de .htaccess para mod_php, o incluso .user.ini con configuraciones FastCGI.

Habilitarlo dentro del script roto es demasiado tarde porque PHP ni siquiera puede interpretar / ejecutar la primera línea. Una solución rápida es crear un script de envoltura, por ejemplo test.php:

Luego, invoque el código defectuoso accediendo a este script de envoltura.

También ayuda a habilitar PHP error_log y busque en su servidor web error.log cuando un script falla con respuestas HTTP 500.

Creo que este tema está demasiado discutido / complicado. Usar un IDE es EL camino a seguir para evitar por completo cualquier error de sintaxis. Incluso diría que trabajar sin un IDE es poco profesional. ¿Por qué? Porque los IDE modernos verifican su sintaxis después de cada carácter que escribe. Cuando codifica y toda la línea se vuelve roja, y un gran aviso de advertencia le muestra el tipo exacto y la posición exacta del error de sintaxis, entonces no hay absolutamente ninguna necesidad de buscar otra solución.

Usar un IDE de verificación de sintaxis significa:

(Efectivamente) nunca más se encontrará con errores de sintaxis, simplemente porque los ve correctamente mientras escribe. Seriamente.

Excelentes IDE con verificación de sintaxis (todos están disponibles para Linux, Windows y Mac):

  1. NetBeans [free]
  2. PHPStorm [$199 USD]
  3. Eclipse con el complemento PHP [free]
  4. Sublime [$80 USD] (principalmente un editor de texto, pero ampliable con complementos, como Analizador de sintaxis PHP)

Inesperado [

These days, the unexpected [ array bracket is commonly seen on outdated PHP versions. The short array syntax is available since PHP >= 5.4. Older installations only support array().

$php53 = array(1, 2, 3);
$php54 = [1, 2, 3];  ⇑

La desreferenciación de resultados de la función de matriz tampoco está disponible para versiones anteriores de PHP:

$result = get_whatever()["key"];
                      ⇑

Referencia - ¿Qué significa este error en PHP? - "Error de sintaxis, inesperado [" shows the most common and practical workarounds.

Though, you're always better off just upgrading your PHP installation. For shared webhosting plans, first research if e.g. SetHandler php56-fcgi can be used to enable a newer runtime.

See also:

  • PHP syntax for dereferencing function result → possible as of PHP 5.4
  • PHP syntax error, unexpected '['
  • Shorthand for arrays: is there a literal syntax like or []?
  • Error de sintaxis de PHP 5.3.10 vs PHP 5.5.3 inesperado '['
  • PHP Difference between array() and []
  • Error de análisis de sintaxis de matriz PHP Corchete cuadrado izquierdo "["

BTW, there are also preprocessors and PHP 5.4 syntax down-converters if you're really clingy with older + slower PHP versions.

Other causes for Unexpected [ syntax errors

If it's not the PHP version mismatch, then it's oftentimes a plain typo or newcomer syntax mistake:

  • You can't use array property declarations/expressions in classes, not even in PHP 7.

    protected $var["x"] = "No";  ⇑
    
  • Confuso [ with opening curly braces { or parentheses ( is a common oversight.

    foreach [$a as $b)
            ⇑
    

    Or even:

    function foobar[$a, $b, $c]  ⇑
    
  • O intentando desreferenciar constantes (antes de PHP 5.6) como matrices:

    $var = const[123];
           ⇑
    

    Al menos PHP interpreta eso const como un nombre constante.

    Si deseaba acceder a un array variable (que es la causa típica aquí), luego agregue la $ sigilo - por lo que se convierte en un $varname.

  • Estás intentando utilizar el global palabra clave en un miembro de una asociación array. Esta no es una sintaxis válida:

    global $var['key'];
    

Inesperado ]clausura corchete

Esto es algo más raro, pero también hay accidentes de sintaxis con la terminación array ] soporte.

  • Nuevamente desajustes con ) paréntesis o Las llaves son comunes:

    function foobar($a, $b, $c] {
                              ⇑
    
  • O tratando de terminar un array donde no hay uno:

    $var = 2];
    

    Que ocurre a menudo en multilínea y anidado array declaraciones.

    $array = [1,[2,3],4,[5,6[7,[8],[9,10]],11],12]],15];
                                                 ⇑
    

    Si es así, use su IDE para hacer coincidir los corchetes para encontrar cualquier prematuro ] array cierre. Como mínimo, utilice más espacios y nuevas líneas para reducirlo.

Acuérdate de que te permitimos parafrasear si topaste tu traba .

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Respuestas a preguntas comunes sobre programacion y tecnología