Todos se deparam com erros de sintaxe. Até mesmo programadores experientes fazem erros de digitação. Para os recém-chegados, it's é apenas parte do processo de aprendizagem. No entanto, it's frequentemente é fácil de interpretar mensagens de erro, tais como:
PHP Parse error: erro de sintaxe, inesperado '{'in index.php on line 20 O símbolo inesperado é'nem sempre o verdadeiro culpado. Mas o número da linha dá uma ideia aproximada de onde começar a procurar. olhe sempre para o contexto do código*. O erro de sintaxe muitas vezes se esconde nas mencionadas ou nas linhas de código anteriores*. Compare o seu código com exemplos de sintaxe do manual. Embora nem todos os casos coincidam com os outros. No entanto, existem alguns passos gerais para solver erros de sintaxe. Estas referências resumem as armadilhas comuns:
- Unexpected T_STRING
- Inesperado T_VARIABLE
Inesperado '$varname' (T_VARIABLE)- Unexpected T_CONSTANT_ENCAPSED_STRING
Unexpected T_ENCAPSED_AND_WHITESPACE](https://stackoverflow.com/a/18092288)- Unexpected $end
- Unexpected T_FUNCTION...
- Unexpected
{
Unexpected}
Unexpected(
Unexpected)
](https://stackoverflow.com/a/18092308)- Unexpected
[
Unexpected]
](https://stackoverflow.com/a/29505827)- Inesperado T_IF
Inesperado T_FOREACH
Inesperado T_FOR
Inesperado T_WHILE
Inesperado T_DO
Inesperado T_PRINT
Inesperado T_ECHO- Unexpected T_LNUMBER
- Inesperado?
- Unexpected continue (T_CONTINUE)
Unexpected continue (T_BREAK)
Unexpected continue (T_RETURN)](//stackoverflow.com/a/51786865)- Inesperado '='
- Unexpected T_INLINE_HTML...
- Inesperado T_PAAMAYIM_NEKUDOTAYIM...
- Inesperado T_OBJECT_OPERATOR...
- Unexpected T_DOUBLE_ARROW...
- Unexpected T_SL...
- Unexpected T_BOOLEAN_OR...
Unexpected T_BOOLEAN_AND...- Inesperado T_IS_EQUAL
Inesperado T_IS_GREATER_OR_EQUAL
Inesperado T_IS_IDENTICAL
Inesperado T_IS_NÃO_EQUAL
Inesperado T_IS_NOT_IDENTICAL
Inesperado T_IS_SMALLER_OR_EQUAL
Inesperado<
Inesperado>
- Unexpected T_NS_SEPARATOR...
- Caracteres inesperados na entrada: '
\
' (ASCII=92) state=1- Inesperado 'public' (T_PUBLIC)
Inesperado 'private' (T_PRIVATE)
Inesperado 'protected' (T_PROTECTED)
Inesperado 'final' (T_FINAL)](https://stackoverflow.com/questions/13341378/php-parse-error-syntax-error-unexpected-t-public)...- Unexpected T_STATIC...
- Unexpected T_CLASS...
- Unexpected T_DNUMBER
- Inesperado
,
](https://stackoverflow.com/questions/29241208/php-parse-error-syntax-error-unexpected-in) (comma)- Unpexected
.
(período)- Inesperado
;
(ponto-e-vírgula)- Unexpected
*
(asterisco)- Inesperado
:
(cólon) Referências estreitamente relacionadas:- O que significa este erro em PHP? (erros em tempo de execução)
- Parse error: syntax error, unexpected T_XXX
- Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE
- Parse error: syntax error, unexpected T_VARIABLE
- O que significa este símbolo em PHP? (tokens de linguagem)
- Aquelas citações "inteligentes" não significam nada para o PHP](https://stackoverflow.com/questions/14303353/double-quotes-are-not-copied-normally-how-can-i-edit-them) E..:
- O manual PHP em php.net e seus vários tokens de linguagem
- Ou Wikipedia's introdução de sintaxe em PHP.
- E por último a nossa **php*** tag-wiki, claro. Enquanto o Stack Overflow também está recebendo codificadores novatos, ele's tem como alvo principalmente questões profissionais de programação.
- Responder a todos's erros de codificação e erros de digitação estreitos é considerado principalmente fora do tópico.
- Então, por favor, tome um tempo para seguir os passos básicos, antes de postar pedidos de correção de sintaxe.
Se você ainda tiver que fazê-lo, por favor mostre sua própria iniciativa de resolução, tentativas de correção, e seu processo de pensamento sobre o que parece ou pode estar errado. Se o seu browser exibe mensagens de erro como "SyntaxError: illegal character", então it's not actually [tag:php]-related, but a [tag:javascript]-syntax error.
**Finalmente, considere que se o erro de sintaxe não foi levantado ao editar sua base de códigos, mas após a instalação ou atualização de um pacote de um fornecedor externo, pode ser devido à incompatibilidade da versão PHP, então verifique os requisitos do fornecedor's em relação à configuração de sua plataforma.
O PHP pertence às linguagens de programação estilo C e imperativo. Ele tem regras gramaticais rígidas, das quais não pode se recuperar ao encontrar símbolos ou identificadores equivocados. Ele pode't adivinhar suas intenções codificadoras. .
Há algumas precauções básicas que você pode sempre tomar:
Uma mensagem de erro de sintaxe típica lê-se:
Parse error: syntax error, unexpected T_STRING, expecting '
;
' in file.php on line 217 Que lista a localização possível de um erro de sintaxe. Veja o mencionado nome do arquivo e número da linha. Um moniker comoT_STRING
explica qual símbolo o parser/tokenizer poderia't processar finalmente. Isto é't necessariamente a causa do erro de sintaxe, no entanto. É importante olhar em **linhas de código anteriores*** também. Muitas vezes os erros de sintaxe são apenas contratempos que aconteceram anteriormente. O número da linha de erro é exatamente onde o analisador conclusivamente desistiu para processar tudo.Resolvendo erros de sintaxe
Há muitas abordagens para reduzir e corrigir os soluços de sintaxe.
;
ponto-e-vírgula nas extremidades/etapas anteriores. (Pelo menos do ponto de vista estilístico. ){
blocos de código }
estiverem incorretamente fechados ou aninhados, você pode precisar investigar ainda mais acima o código fonte. Use a indentação apropriada de código para simplificar isso.+-*/.
também devem ser coloridos de forma distinta. Caso contrário, eles podem estar no contexto errado."
ou '
sem forma ou sem forma.++
, --
, ou parênteses seguindo um operador. Duas cordas/identificadores que se seguem diretamente um ao outro são incorretos na maioria dos contextos.if' em condições distintas ou aninhadas
if'.? :
pode compactar código e é de fato útil. Mas ele não't ajuda na legibilidade em todos os casos. Prefira instruções simples de 'if' enquanto não está em uso.if:
/elseif:
/endif;
) é comum para os templates, mas indiscutivelmente menos fácil de seguir do que os blocos normais {
code }
.;
para declarações/linhas terminadas."
ou '
e citações não escalonadas dentro..
concatenação.(
parênteses )
não balanceados. Conte-os na linha relatada. Há um número igual deles?diff
da versão quebrada e da última versão funcional. O que pode ser esclarecedor quanto a qual é o problema de sintaxe.
//
ou #
. Comentários de múltiplas linhas /*...*/
raramente perturbam o analisador quando as quebras de linha são ignoradas.php -v
para o interpretador de linha de comando<?php phpinfo();
para aquele invocado através do webserver.
Se o seu site está apenas em branco, então normalmente um erro de sintaxe é a causa. Habilite sua exibição com:
error_reporting = E_ALL
display_errors = 1
No seu php.ini
geralmente, ou via .htaccess
para o mod_php,
ou mesmo .user.ini
com as configurações do FastCGI.
Habilitá-lo dentro do script quebrado é muito tarde porque o PHP pode'nem mesmo interpretar/executar a primeira linha. Uma alternativa rápida é criar um script wrapper, digamos test.php
:<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
include("./broken-script.php");
Em seguida, invoque o código de falha acessando este script de invocação.
Ele também ajuda a habilitar o PHP's error_log
e olhar no seu webserver's error.log
quando um script trava com as respostas do HTTP 500.
An "inesperado T_VARIABLE
" significa que há'é um nome literal $variável
, que não'não se encaixa na estrutura atual de expressão/exposição.
Indica mais comumente um ponto-e-vírgula ausente na linha anterior. As atribuições de variáveis após uma declaração são um bom indicador para onde olhar:
⇓
func1()
$var = 1 + 2; # erro de parse na linha +2
Um percalço freqüente são concatenações de cordas com o esquecido .
operador:
⇓
print "Aqui vem o valor: " $value;
Btw, você deve preferir interpolação de strings (variáveis básicas entre aspas duplas) sempre que isso ajudar a legibilidade. O que evita estes problemas de sintaxe.
A interpolação de strings é uma característica central do scripting language. Não há vergonha em utilizá-la. Ignore qualquer conselho de micro-optimização sobre a variável
.
concatenação sendo rápida. Não é's não.
Claro que a mesma questão pode surgir em outras expressões, por exemplo, operações aritméticas:
⇓
imprimir 4 + 7 $var;
PHP can't guess aqui se a variável deveria ter sido adicionada, subtraída ou comparada, etc.
O mesmo para listas de sintaxe, como nas populações de array, onde o analisador também indica uma vírgula ,
esperada, por exemplo:
⇓
$var = array("1" => $val, $val2, $val3 $val4);
Ou listas de parâmetros de funções:
⇓
function myfunc($param1, $param2 $param3, $param4)
Da mesma forma, você vê isso com declarações de "lista" ou "global", ou quando falta um ponto-e-vírgula em um loop de "para".
Este erro de análise também ocorre em declarações de classe. Você só pode atribuir constantes estáticas, não expressões. Assim, o analisador reclama das variáveis como dados atribuídos:
classe xyz { ⇓
var $valor = $_GET["input"];
O fechamento inigualável dos suportes de cabelo encaracolado pode, em particular, conduzir aqui. Se um método é terminado muito cedo (use indentação apropriada!), então uma variável perdida é normalmente mal colocada no corpo de declaração de classe.
Você também nunca pode ter uma variável seguindo um identificador diretamente:
⇓
$this->myFunc$VAR();
Btw, este é um exemplo comum onde a intenção era usar variáveis talvez. Neste caso, uma pesquisa de propriedade de variável com $this->{"myFunc$VAR"}();
por exemplo.
Tenha em mente que o uso de variáveis variáveis deve ser a exceção. Os recém-chegados muitas vezes tentam usá-las de forma muito casual, mesmo quando as arrays seriam mais simples e mais apropriadas.
A digitação precipitada pode levar a parênteses de abertura esquecidos para declarações de "se" e "para" e "para cada":
⇓
Foreach $array como $key) {
Solução: adicionar a abertura em falta (
entre o comando e a variável.
⇓
senão ($var >= 0)
Solução: Remover as condições de else
ou utilizar elseif
.
⇓
function() utiliza $var {}
Solução: Adicionar parênteses em torno de $var
.
Como mencionado na resposta de referência em "Invisible stray Unicode" (como um espaço não quebrado), você também pode ver este erro para código insuspeito como:
<?php
⇐
$var = nova DOP(...);
It's bastante predominante no início dos arquivos e para código copiado e colado. Verifique com um hexeditor, se seu código não parece conter visualmente um problema de sintaxe.
"T_STRING" é um nome um pouco errado. Ele não se refere a um "string"
. Significa que um identificador bruto foi encontrado. Isto pode variar de bare
palavras a sobras de CONSTANT
ou nomes de funções, strings esquecidas não citadas, ou qualquer texto simples.
<?xml
cabeçalhos em scripts PHP