0

Como diferenciar uma função nativa de uma construção da linguagem?

criado por Rubens Takiguti Ribeiro em 12/01/2010 8:15pm
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:
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
print
require
require_once
return
unset

Lista de Respostas:

0
14/01/2010 9:35am
(~14 anos atrás)
BOZO respondeu:
Parabens Rubens,
pela primeira vez, vejo alguem usando a FAQ para o seu verdadeiro fim.

Nova Resposta:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)