Como diferenciar uma função nativa de uma construção da linguagem?
Algumas pessoas acham que "echo", "isset", "include", entre outras, são funções do PHP. Na verdade, elas são chamadas de "construções da linguagem". São construções da linguagem aqueles elementos que são capturados diretamente pelo parser de tokens da linguagem.
Ao executar um script PHP pela primeira vez, o interpretador da linguagem varre o código-fonte (escrito pelo programador) analisando e classificando o que é cada elemento do texto. Caso não tenha erros de sintaxe, o código então é convertido em uma versão mais baixo nível e executado. Os tokens observados pelo parser são listados no link:
http://br2.php.net/manual/en/tokens.php
Alguns exemplos de tokens são:
T_ELSE - quando o interpretador encontra "else"
T_FOREACH - quando o interpretador encontra "foreach (...)"
T_IF - quando o interpretador encontra "if (...)"
A sintaxe de utilização de alguns tokens do PHP são muito semelhantes à forma como funcionam funções nativas do PHP. Isso gera uma certa confusão. Portanto, para determinar se algo é construção da linguagem ou não, consulte a tabela.
A construção "echo", por exemplo não obriga a utilização de parênteses. As duas linhas abaixo são válidas:
O mesmo ocorre para outras construções da linguagem, como o include (e semelhantes).
Porém, existe uma diferença estrutural entre funções e construções da linguagem. Não é possível, por exemplo, montar um callback de uma construção da linguagem. Além disso, algumas construções da linguagem podem ter os parênteses opcionais, enquanto a chamada de funções convencionais sempre obriga a utilização dos parênteses. Por se tratarem de elementos mais baixo nível, as contruções da linguagem normalmente tem altíssima performance.
Abaixo segue uma lista com as construções da linguagem que se assemelham com funções:
array
clone
declare
die
echo
empty
eval
exit
include
include_once
isset
list
print
require
require_once
return
unset
Ao executar um script PHP pela primeira vez, o interpretador da linguagem varre o código-fonte (escrito pelo programador) analisando e classificando o que é cada elemento do texto. Caso não tenha erros de sintaxe, o código então é convertido em uma versão mais baixo nível e executado. Os tokens observados pelo parser são listados no link:
http://br2.php.net/manual/en/tokens.php
Alguns exemplos de tokens são:
T_ELSE - quando o interpretador encontra "else"
T_FOREACH - quando o interpretador encontra "foreach (...)"
T_IF - quando o interpretador encontra "if (...)"
A sintaxe de utilização de alguns tokens do PHP são muito semelhantes à forma como funcionam funções nativas do PHP. Isso gera uma certa confusão. Portanto, para determinar se algo é construção da linguagem ou não, consulte a tabela.
A construção "echo", por exemplo não obriga a utilização de parênteses. As duas linhas abaixo são válidas:
echo("oi"); echo "oi";
O mesmo ocorre para outras construções da linguagem, como o include (e semelhantes).
Porém, existe uma diferença estrutural entre funções e construções da linguagem. Não é possível, por exemplo, montar um callback de uma construção da linguagem. Além disso, algumas construções da linguagem podem ter os parênteses opcionais, enquanto a chamada de funções convencionais sempre obriga a utilização dos parênteses. Por se tratarem de elementos mais baixo nível, as contruções da linguagem normalmente tem altíssima performance.
Abaixo segue uma lista com as construções da linguagem que se assemelham com funções:
array
clone
declare
die
echo
empty
eval
exit
include
include_once
isset
list
require
require_once
return
unset
comentários (0)
suspender
Lista de Respostas:
14/01/2010 9:35am
(~15 anos atrás)
(~15 anos atrás)
Parabens Rubens,
pela primeira vez, vejo alguem usando a FAQ para o seu verdadeiro fim.
pela primeira vez, vejo alguem usando a FAQ para o seu verdadeiro fim.