blob: 2b0be565b78e11a8d95b3e5bf1a518bc52c9986d [file] [log] [blame]
//
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
//
= Modelos de Código no NetBeans IDE para PHP
:jbake-type: tutorial
:jbake-tags: tutorials
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Modelos de Código no NetBeans IDE para PHP - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Modelos de Código no NetBeans IDE para PHP
Os modelos de código são snippets pré-escritos de código fornecidos pelo NetBeans IDE. Você pode colar um snippet no código utilizando a funcionalidade autocompletar código ou a abreviação do modelo seguida da tecla Tab. Você também pode incluir o código entre snippets apropriados de PHP. Finalmente, você pode definir seus próprios modelos de código. Este tutorial mostra como utilizar os modelos de código e sugere casos úteis para definição de seus próprios modelos de código.
*Para concluir este tutorial, você precisa dos seguintes recursos e softwares.*
|===
|Software ou Recurso |Versão Necessária
|link:https://netbeans.org/downloads/index.html[+NetBeans IDE+] |Pacote de download do PHP
|link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+JDK (Java Development Kit)+] |7 ou 8
|===
 
== Modelos de Código PHP Definidos
Para exibir os modelos de código definidos no NetBeans, abra Ferramentas > Opções (NetBeans > Preferências no Mac), selecione as funcionalidades do Editor e selecione a guia Modelos de Código. Para ver os modelos de código PHP, selecione PHP na lista drop-down Linguagens. Uma tabela de abreviações e textos expandidos de modelos de códigos será exibida. Se selecionar um modelo de código na tabela, o seu texto expandido será exibido na guia Texto Expandido.
image::images/code-template-options.png[]
Nesta imagem, o novo modelo de código classe ( ``cls)`` está selecionado e na guia Texto Expandido você vê como fica o modelo quando está expandido. Na próxima seção, você usa a função Tab para expandir este modelo no código.
NOTE: a sintaxe do novo modelo de código classe ( ``cls`` ) é explorada na seção <<syntax,Sintaxe do Modelo de Código PHP>>.
== Usando Modelos de Código PHP
Há três formas de inserir modelos de código no código PHP. Cada forma de inserção de modelos de código tem sua utilidade, dependendo do caso. As três formas de inserir modelos de código são:
* <<expand-with-abb,Expanda o modelo>> utilizando a abreviação do modelo seguida da tecla Tab (ou de outra tecla ou de uma combinação de teclas definida por você).
* <<expand-with-cc,Insira o modelo expandido>> utilizando a função autocompletar código.
* <<surround-code,Inclua o código>> no modelo utilizando dicas da margem ou Alt-Enter.
Após a inserção do modelo, o IDE ajuda você a <<edit-parameters,editar os parâmetros>> do código de modelo expandido.
=== Expandindo o modelo de código usando abreviação + Tab
Examine novamente a guia Modelos de Código da caixa de diálogo Opções. Na parte inferior há um campo drop-down para selecionar a combinação de teclas Expandir Modelo Em. Esta será a combinação de teclas que você pressionará depois de digitar a abreviação do modelo de código para expandir o modelo de código. A tecla Tab está selecionada por default, mas você pode selecionar outras combinações.
image::images/expand-template-on.png[]
O restante desta seção pressupõe que a tecla Tab esteja selecionada por default no campo Expandir Modelo em:.
Quando a abreviatura de um modelo também fizer parte de uma palavra-chave da funcionalidade autocompletar código, pode ser difícil expandir a abreviação. Neste caso, será mais fácil utilizar <<expand-with-cc,autocompletar código>> para inserir o modelo.
*Para expandir o novo modelo de código de classe utilizando sua abreviação + Tab:*
1. Crie um arquivo PHP vazio.
2. No bloco PHP desse arquivo, digite ``cls`` e pressione Tab. O modelo de código ``cls`` se expandirá.
*Advertência:* digite corretamente a abreviação! A expansão não funcionará, caso a abreviação esteja mal escrita.
image::images/expanding-template-with-abb.png[]
[start=3]
. O nome de classe do placeholder ( ``*class_name*`` ) é selecionado automaticamente. Você pode mover-se entre os placeholders pressionando Tab. Você pode digitar imediatamente o nome desejado para a classe e este nome substitui o placeholder. Pressione Enter quando tiver terminado e o IDE selecionará o nome da primeira função, que neste caso é o construtor.
NOTE: os nomes do placeholder são abordados com mais detalhes na <<placeholder,seção Nome do Placeholder>>.
image::images/select-constructor-name.png[]
[start=4]
. Edite o nome da função ou aceite o default. Pressione Enter novamente e o cursor irá para dentro do corpo da função. Em uma situação real, você poderia agora começar a codificar a função e o resto da classe.
A posição final do cursor é determinada pelo parâmetro ``${cursor}`` . Este parâmetro será descrito na seção <<reserved-name,Nomes Reservados>>.
=== Inserindo o modelo de código com a função autocompletar código
Para inserir um modelo de código utilizando a função autocompletar código, digite o início do snippet expandido (e _não_ a abreviação do modelo). A caixa de diálogo da função autocompletar código será aberta para mostrar o snippet.
*Para inserir o novo modelo de código de classe utilizando a função autocompletar código:*
1. Digite ``cla`` no bloco PHP de um arquivo PHP.
2. Espere que a caixa de diálogo da função autocompletar código seja aberta.
3. Localize o novo modelo de classe, que está listado com a abreviação ( ``cls`` ). O quadro do PHPDoc mostra o modelo expandido.
image::images/insert-template-with-cc.png[]
[start=4]
. Selecione o novo modelo de classe e pressione Enter. O IDE o insere no código.
[start=5]
. O nome de classe do placeholder ( ``*class_name*`` ) é selecionado automaticamente. Você pode mover-se entre os placeholders pressionando Tab. Você pode digitar imediatamente o nome desejado para a classe e este nome substitui o placeholder. Pressione Enter quando tiver terminado e o IDE selecionará o nome da primeira função, que neste caso é o construtor.
image::images/select-constructor-name.png[]
[start=6]
. Edite o nome da função ou aceite o default. Pressione Enter novamente e o cursor irá para dentro do corpo da função. Em uma situação real, você poderia agora começar a codificar a função e o resto da classe.
=== Incluindo o código em um modelo
Você pode incluir o código nos seguintes modelos de PHP:
* ``while``
* ``do``
* ``switch``
* ``if`` / ``elseif``
* ``try`` e ``catch``
* ``foreach``
* ``for``
* ``ob_start`` e ``ob_end_clean``
Além disso, você pode <<create,criar um novo modelo>> que pode circundar o código, se o modelo incluir `allowSurround` <<complex,parameter hint>>. (Dica para o link:http://www.mybelovedphp.com/2012/05/14/tips-for-using-the-netbeans-editor-for-kohana-and-kostache-mustache-templates-using-surround-with/[+ Blog My Beloved PHP+].)
Para circundar o código com um modelo, selecione o código e abra a caixa de diálogo Circundar com... Para abrir a caixa de diálogo Circundar com..., pressione Alt-Enter ou clique no ícone Dica image:images/hint-icon.png[].
*Para circundar o código em um modelo if(true):*
1. Crie um bloco PHP com as variáveis ``$a = true`` e ``$b = 10`` .
[source,php]
----
<?php$a = false;$b = 10;?>
----
[start=2]
. Selecione a linha ``$b = 10;``
image::images/selected-variable.png[]
[start=3]
. Clique no ícone Dica image::images/hint-icon.png[] ou pressione Alt-Enter. A caixa de diálogo Circundar com... será aberta.
image::images/surround-hint.png[]
[start=4]
. Clique em ``Circundar com if{*true*){...``
image::images/surround-if-true.png[]
[start=5]
. O IDE circunda a linha ``$b = 10;`` com um modelo ``if(*true*){...`` .
image::images/inserted-if-true.png[]
O IDE insere automaticamente a variável apropriada precedente mais próxima como a condição da instrução ``if`` . Neste caso, essa variável é ``$a`` , porque ``$a`` é um booliana e a instrução ``if(*true*){}`` toma uma variável booliana como sua condição. Além disso, a condição é selecionada automaticamente para edição caso a variável que o IDE insira na condição não seja a variável correta. Isso significa que você pode começar a digitar a variável correta imediatamente depois que o modelo tiver sido inserido. A funcionalidade autocompletar código pode ajudar você a selecionar a variável correta neste caso.
NOTE: o modelo ``if(*true*){}`` é descrito com detalhes na seção <<complex,Parâmetro definido por dicas>>.
image::images/change-condition.png[]
Pressione Enter para sair da condição de instrução. O cursor se desloca para o local apropriado, que neste caso é o fim da linha ``$b = 10;`` . Você pode editar a condição e pressionar Enter ou aceitar a condição inserida automaticamente e pressionar Enter. Em qualquer um dos casos, o cursor sai da condição e se desloca para o local apropriado.
image::images/cursor-after-not-editing.png[]
image::images/cursor-after-editing.png[]
A próxima seção contém mais detalhes sobre a edição de parâmetros nos modelos expandidos.
=== Editando parâmetros em modelos expandidos
Nas seções sobre inserção de modelos no código, você viu como o IDE selecionou automaticamente o nome da classe para edição quando o novo modelo de classe foi expandido, e como o IDE selecionou automaticamente o nome da condição para edição quando o modelo ``if(*true*)`` foi expandido. Agora veremos mais algumas formas de como o IDE ajuda a editar os parâmetros nos modelos expandidos.
*Para editar simultaneamente várias instâncias de um parâmetro:*
1. Em um bloco PHP vazio, digite ``for`` e pressione Ctrl-Espaço para abrir a funcionalidade autocompletar código. Selecione o modelo de iteração (abreviação ``iter`` ) e pressione Enter. Uma nova iteração será inserida no seu código.
image::images/iter-cc.png[]
[start=2]
. A iteração tem duas variáveis como parâmetros, ``$index`` e ``$array`` . ``$index`` é selecionada automaticamente para edição. (Pressionando Tab elas são movidas entre os parâmetros.)
image::images/iteration1.png[]
Digite ``i`` . Todas as três instâncias de ``$index`` mudam para ``$i`` .
image::images/iteration2.png[]
[start=3]
. Pressione Enter ou Tab. O parâmetro ``$array`` é selecionado.
[start=4]
. Pressione Enter. O cursor insere o corpo do método da iteração.
A funcionalidade de refatoração do nome da variável no NetBeans permite alterar todas as instâncias de nome da variável editando somente uma instância. Aqui você pode ver como essa funcionalidade é útil quando aplicada nos parâmetros do modelo.
O editor PHP do NetBeans IDE também ajuda a identificar o método correto para as variáveis.
*Para associar uma variável de um modelo ao método correto:*
1. Em um bloco PHP vazio, digite o seguinte código:
[source,php]
----
<?php$arr = array(new ArrayIterator($array()), new ArrayObject($array()));?>
----
[start=2]
. Depois da linha que declara o array ``$arr`` , digite ``fore`` e use a funcionalidade de autocompletar código para inserir o modelo ``foreach`` (abreviação: ``fore`` ).
image::images/cc-foreach.png[]
[start=3]
. Coloque o cursor no corpo da função ``foreach`` (você pode pressionar Enter duas vezes para tirar o cursor de lá) e digite ``$value`` , ou digite somente ``$`` e selecione ``$value`` na funcionalidade autocompletar código.
[source,php]
----
<?php$arr = array(new ArrayIterator($array()), new ArrayObject($array()));foreach ($arr as $value) {$value}?>
----
[start=4]
. Depois de ``$value`` , digite ``->`` . A funcionalidade autocompletar código oferece os métodos corretos para a variável ``$value`` , que se deriva do array ``$arr`` .
image::images/value-method-cc.png[]
== Sintaxe de Modelo de Código PHP
O NetBeans IDE oferece modelos de código a todas as linguagens que suporta. Algumas das sintaxes são comuns para todas as linguagens. Outra sintaxe é específica para uma linguagem. Nesta seção, você vê a sintaxe de modelo geral mais relevante e a sintaxe específica para modelos PHP.
Um modelo de código PHP pode conter código PHP e parâmetros de modelo. Um modelo PHP pode consistir em somente código PHP, somente parâmetros ou código e parâmetros.
A sintaxe de um parâmetro de modelo de código é um cifrão, ``$`` , seguido de uma definição do parâmetro entre chaves ``{...}`` . Dentro desta sintaxe, os parâmetros do modelo têm uma destas quatro formas:
* Um <<placeholder,nome de placeholder>> arbitrário, como ``${SomeName}``
* Um <<reserved-name,nome reservado>> que fornece as instruções de processamento ao IDE
* Um nome de parâmetro descritivo e um conjunto de <<complex,dicas que definem o parâmetro>>
* <<pre-defined,Parâmetros predefinidos>>.
As seções a seguir abordam cada uma das formas de um parâmetro de modelo de código.
NOTE: ``$$${VARIABLE...} `` às vezes, é exibido um modelo de código PHP no qual a sintaxe parece ser três cifrões seguidos das chaves ``$$${...}`` . Neste caso, o modelo de código inclui uma variável e seu nome. A sintaxe aqui é um cifrão com escape, escrito como dois cifrões ``$$`` , seguido de um parâmetro do nome da variável, ``${VARIABLE...}`` . Por exemplo, o modelo de código ``catch ${Exception} $$${exc}`` é expandido como [examplecode]# ``catch Exception $exc`` #.
=== Nome do placeholder
Nos casos mais simples, o parâmetro de modelo de código é um valor arbitrário de placeholder. Quando o modelo é expandido, o IDE seleciona o nome desse placeholder para edição.
Por exemplo, examine o novo modelo de classe ``(cls)`` que este tutorial mostra nas seções <<define,Modelos de PHP Definidos >> e <<expand-with-abb,Expandindo o modelo de código usando abreviação + Tab>>. O texto expandido do novo modelo classe começa com ``class ${className}`` . Aqui, a palavra ``class`` é o código PHP e ``${className}`` é um parâmetro. Este parâmetro é apenas um valor arbitrário de placeholder para o nome da classe. Quando o IDE expande o modelo, ``${className}`` se transforma em ``*class_name*`` . O IDE espera que ``*class_name*`` seja somente um valor de placeholder e seleciona automaticamente este valor para que seja editado.
image::images/expanding-template-with-abb.png[]
=== Nomes reservados
O IDE reserva dois nomes de parâmetros para serem utilizados como instruções de operação.
* ``${cursor}`` define o local do cursor depois que você finaliza a edição de todos os valores selecionados automaticamente no modelo expandido.
* ``${selection}`` define a posição para colar o conteúdo da seleção do editor. É usado pelos chamados "modelos de seleção" que aparecem como dicas sempre que o usuário seleciona texto no editor. Se um modelo incluir ``${selection}`` , ele geralmente fará referência ao mesmo local que ``${cursor}`` .
Por exemplo, novamente examine o novo modelo de classe ``(cls)`` que este tutorial mostra nas seções <<define,Modelos de PHP Definidos >> e <<expand-with-abb,Expandindo o modelo de código usando abreviação + Tab>>. Ele contém dois parâmetros de nome do placeholder ``${ClassName}`` e ``$__construct`` . No corpo da função, há os parâmetros ``${cursor}`` e ``${selection}`` .
[source,php]
----
class ${ClassName} {function ${__construct} {${selection}${cursor}}}
----
Depois que o modelo se expandir, o placeholder ``*class_name*`` será automaticamente selecionado (1). Pressione Enter e o placeholder ``*__construct*`` será automaticamente selecionado (2). Não há outros valores a serem editados. Pressione Enter novamente, e o cursor se deslocará para o local indicado pelo ``${cursor}`` no texto do modelo (3).
image::images/cursor-position-changes.png[]
=== Parâmetros definidos por dicas
Os parâmetros podem ter um nome arbitrário e descritivo em MAIÚSCULAS e uma ou mais dicas.
[source,php]
----
${PARAMETER_NAME hint1[=value] [hint2...hint n]}
----
O nome não aparece em nenhum lugar do código. No entanto, é útil se você quiser utilizar o parâmetro mais de uma vez em um modelo de código. Você só precisa definir o parâmetro na primeira vez e pode fazer referência a ele usando o nome todas as vezes seguintes. Por exemplo, no modelo de código a seguir, o parâmetro ``${CONLINK}`` é definido somente na primeira vez, mas é mencionado pelo seu nome duas vezes mais.
[source,php]
----
$$${CONLINK newVarName default="link"} = mysql_connect('localhost''mysql_user''mysql_password'); if (!$$${CONLINK}) {    die('Could not connect: ' mysql_error()); } echo 'Connected successfully'; mysql_close($$${CONLINK}); ${cursor}
----
As dicas ajudam o IDE a calcular o valor do parâmetro do modelo quando o IDE expande o modelo de código. Veja, por exemplo, o modelo ``if(*true*)`` , utilizado neste tutorial na seção <<surround-code,circundando o código com um modelo>>. O texto expandido deste modelo é
[source,php]
----
if (${CONDITION variableFromPreviousAssignment instanceof="boolean" default="true"}) {${selection}${cursor}}
----
Examine o parâmetro ``${CONDITION variableFromPreviousAssignment instanceof="boolean" default="true"}`` . Este parâmetro define a condição da instrução ``if`` . Portanto, o parâmetro é denominado CONDITION. A primeira dica é ``variableFromPreviousAssignment`` e a segunda dica é ``instanceof="boolean"`` . Juntas, estas duas dicas dizem ao IDE para procurar a variável booliana mais próxima que está designada no código anterior ao modelo de código. Adicione a terceira dica, ``default="true"`` , e o parâmetro define a condição como "se o valor da variável booliana anterior mais próxima for verdadeiro".
Por exemplo, quando a linha ``$b = 10`` do snippet de código a seguir estiver circundada por um modelo de código `` if(*true*) `` ...
image::images/selected-variable.png[]
...o IDE procura a variável booliana mais próxima designada anteriormente, localiza ``$a`` e gera uma instrução ``if`` com a condição ``$a`` [=true]. A condição é automaticamente selecionada para edição, de modo que o programador de PHP pode alterar ``$a`` para outra variável ou para ``!$a`` .
image::images/inserted-if-true.png[]
A tabela a seguir lista as dicas utilizadas nos modelos de código PHP e as descrições das dicas.
|===
|Dica |Descrição
| ``newVarName`` |O valor do parâmetro deve ser um nome de variável "fresco", não utilizado. Geralmente utilizado com ``default`` .
| ``default=""`` |O valor default do parâmetro.
| ``instanceof=""`` |Tipo de variável PHP definida no parâmetro.
| ``variableFromPreviousAssignment`` |O valor do parâmetro a variável mais próxima designada anteriormente. Geralmente utilizada com ``instanceof`` e ``default`` .
| ``variableFromNextAssignmentName`` |O valor do parâmetro é o nome da variável mais próxima designada depois do modelo de código. Geralmente utilizado com ``default`` .
| ``variableFromNextAssignmentType`` |O valor do parâmetro é o tipo da variável mais próxima designada depois do modelo de código. Geralmente utilizado com ``default`` .
| ``editable=false`` |O valor do parâmetro não pode ser editado depois que o modelo for expandido.
| ``allowSurround`` |Permite que o modelo seja usado para <<surround-code,circundar o código>>.
|===
== Criando Seus Próprios Modelos de Código
Você também pode criar seus próprios modelos de código no NetBeans IDE. Esta seção explica como criar modelos de código, explora sua sintaxe e sugere alguns modelos úteis para criar.
*Para criar um modelo de código:*
1. Abra Ferramentas > Opções (NetBeans > Preferências no Mac), selecione as funcionalidades do Editor e selecione a guia Modelos de Código.
image::images/code-template-options.png[]
[start=2]
. Clique em Novo para abrir a caixa de diálogo Novo Modelo de Código. Digite a abreviação que deseja para o modelo e clique em OK.
image::images/new-abb.png[]
[start=3]
. É adicionada uma nova linha à tabela de modelos de código. Esta linha contém somente a abreviação fornecida. O cursor está na guia Texto Expandido, onde o IDE colocou o cursor automaticamente. Você pode começar a digitar imediatamente o código do modelo.
NOTE: para saber mais sobre a sintaxe do texto expandido do modelo de código, consulte a seção <<syntax,Sintaxe do Modelo de Código PHP.>>
image::images/new-abb-text.png[]
As seções a seguir descrevem alguns casos de uso para a criação dos seus próprios modelos de código PHP. Se tiver algum outro caso de uso para sugerir, compartilhe-o com a comunidade no link:http://forums.netbeans.org/php-users.html[+Fórum dos Usuários de PHP.+]
=== Caso de uso: inserindo PHP no HTML
Se inserir frequentemente snippets de PHP em um bloco de HTML, você poderá criar um modelo de código HTML que insere o PHP sem que seja necessário digitar ``<?php ?>`` repetidamente.
O modelo de código a seguir insere uma instrução ``echo`` do PHP no HTML.
|===
|Linguagem: |HTML
|Abreviação: |php
|Texto expandido: |
[source,php]
----
<?php echo ${cursor ?>
----
|===
image::images/uc-php.png[]
=== Caso de uso: Joomla
Os modelos de código podem ajudá-lo a utilizar os frameworks PHP no NetBeans IDE, especialmente frameworks que não apresentam suporte incorporado. Este é o modelo de código que um usuário desenvolveu para ser utilizado com Joomla.
|===
|Linguagem: |PHP
|Abreviação: |joomdef
|Texto expandido: |
[source,php]
----
defined('_JEXEC')or die('Restricted access');${cursor}
----
|===
image::images/uc-joomdef.png[]
=== Caso de uso: conexão MySQL
Os desenvolvedores de PHP precisam geralmente criar uma conexão com um banco de dados MySQL. Este modelo de código cria uma conexão para você. A variável designada para a conexão MySQL tem o nome do placeholder `` link`` . Observe o uso do cifrão "triplo" ``$$$`` , na realidade um cifrão duplo, que produz um único cifrão quando expandido, seguido pelo parâmetro do nome da variável.
|===
|Linguagem: |PHP
|Abreviação: |my_con
|Texto expandido: |
[source,php]
----
$$${CONLINK newVarName default="link"} = mysql_connect('localhost''mysql_user''mysql_password'); if (!$$${CONLINK}) {    die('Could not connect: ' mysql_error()); } echo 'Connected successfully'; mysql_close($$${CONLINK}); ${cursor}
----
|===
image::images/uc-mycon.png[]
=== Caso de uso: ação no controlador Zend
Em vez de utilizar o assistente do NetBeans para criar uma ação, você pode utilizar um modelo de código para inserir uma ação em um controlador Zend Framework, como ``indexController{}`` .
|===
|Linguagem: |PHP
|Abreviação: |zf_act
|Texto expandido: |
[source,php]
----
public function ${functionName}Action () {${selection}${cursor} }
----
|===
image::images/uc-zfact.png[]
=== Caso de uso: elemento de form Zend
Este modelo insere um elemento em um form Zend. Use-o depois de gerar um form chamando o comando Zend ``create form <name>`` .
|===
|Linguagem: |PHP
|Abreviação: |zf_element
|Texto expandido: |
[source,php]
----
$$${ELEMENT newVarName default="element"} = new Zend_Form_Element_Submit('submit', array('label' => 'Send data to server')); $$this->addElement($$${ELEMENT}); ${cursor}
----
|===
image::images/uc-zelement.png[]
 
link:/about/contact_form.html?to=3&subject=Feedback:%20PHP%20Code%20Templates[+Enviar Feedback neste Tutorial+]
== Consulte Também
Para obter mais informações sobre a tecnologia PHP no link:https://netbeans.org/[+netbeans.org+], consulte os seguintes recursos:
* link:../java/editor-codereference.html[+Ajuda para Codificação no Editor Java do NetBeans IDE+]. Guia de referência de assistência a código do NetBeans IDE, incluindo modelos de código e gravação de macro.
* link:http://forums.netbeans.org/php-users.html[+Fórum dos Usuários de PHP do NetBeans+]
* link:http://blogs.oracle.com/netbeansphp/[+Blog sobre NetBeans para PHP+]. Blog escrito por desenvolvedores do editor PHP do NetBeans. O melhor lugar para saber mais sobre as últimas funcionalidades e aprimoramentos.
Para enviar comentários e sugestões, obter suporte e manter-se informado sobre os desenvolvimentos mais recentes das funcionalidades de desenvolvimento em PHP no NetBeans IDE, link:../../../community/lists/top.html[+junte-se à lista de correspondência de users@php.netbeans.org.+]