blob: 9b1d53dfde78ed4c3ad243716802844580afdf75 [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.
//
= Шаблоны кода в IDE NetBeans для PHP
:jbake-type: tutorial
:jbake-tags: tutorials
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Шаблоны кода в IDE NetBeans для PHP - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Шаблоны кода в IDE NetBeans для PHP
Шаблона кода представляют собой написанные заранее фрагменты кода, предоставленные IDE NetBeans. Фрагмент можно вставить в код путем дополнения кода или с помощью ввода аббревиатуры шаблона с нажатием клавиши TAB. Также можно добавить соответствующие фрагменты PHP вокруг кода. Наконец, можно задать собственные шаблоны кода. В данном учебном курсе описывается использование шаблонов кода и приводятся варианты определения собственных шаблонов.
image::images/netbeans-stamp-80-74-73.png[title="Содержимое этой страницы применимо к IDE NetBeans 7.2, 7.3, 7.4 и 8.0"]
*Для работы с этим учебным курсом требуются программное обеспечение и ресурсы, перечисленные ниже.*
|===
|Программное обеспечение или материал |Требуемая версия
|link:https://netbeans.org/downloads/index.html[+IDE NetBeans+] |Пакет загрузки PHP
|link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+Комплект для разработчика на языке Java (JDK)+] |7 или 8
|===
 
== Заданные шаблоны кода PHP
Для просмотра шаблонов кода, определенных в NetBeans, выберите команду "Средства" > "Параметры" ("NetBeans" > "Параметры" для Mac), выберите функцию редактора и откройте вкладку "Шаблоны кода". Для просмотра шаблонов кода PHP выберите в раскрывающемся списке "Языки" пункт "PHP". Появится таблица с аббревиатурами шаблонов кода и расширенными текстами. При выборе шаблона кода в таблице на вкладке "Расширенный текст" отображается расширенный текст.
image::images/code-template-options.png[]
В примере на рисунке выбран шаблон кода нового класса ( ``cls)`` , а на вкладке "Расширенный текст" отображается развернутый шаблон. В следующем разделе описывается использование клавиши TAB для развертывания шаблона в коде.
NOTE: Синтаксис нового шаблона кода класса ( ``cls`` ) описывается в разделе <<syntax,Синтаксис шаблона кода PHP>>.
== Использование шаблонов кода PHP
Существует три способа вставки шаблонов в код PHP. Каждый из этих способов предназначен для соответствующих ситуаций. Существуют следующие способы:
* <<expand-with-abb,развертывание шаблона>> с помощью ввода аббревиатуры шаблона с нажатием клавиши TAB (или другой заданной пользователем клавиши или сочетания клавиш);
* <<expand-with-cc,вставка развернутого шаблона>> путем дополнения кода;
* <<surround-code,добавление шаблона вокруг кода>> с помощью подсказки в поле или сочетания клавиш ALT+ВВОД.
После вставки шаблона в среде IDE можно <<edit-parameters,отредактировать параметры>> в развернутом шаблоне кода.
=== Расширение шаблона кода путем ввода аббревиатуры с нажатием клавиши TAB
Снова откройте вкладку "Шаблоны кода" в диалоговом окне "Параметры". В нижней части этого окна расположено раскрывающееся поле для выбора сочетания клавиш для развертывания шаблона. Это сочетание клавиш пользователь нажимает после ввода аббревиатуры шаблона для развертывания шаблона кода. Клавиша TAB выбрана по умолчанию, но вместо нее можно задать другие сочетания клавиш.
image::images/expand-template-on.png[]
Далее в этом разделе предполагается, что в поле "Раскрыть шаблон по" по умолчанию выбрана клавиша TAB.
Если аббревиатура для шаблона также используется в дополнении кода, развернуть ее может быть сложно. В этом случае для вставки шаблона предпочтительно использовать <<expand-with-cc,дополнение кода>>.
*Для развертывания шаблона кода нового класса с помощью ввода аббревиатуры с нажатием клавиши TAB выполните следующее:*
1. Создайте пустой файл PHP.
2. В блоке PHP для этого файла введите текст ``cls`` и нажмите клавишу TAB. Будет развернут шаблон кода ``cls`` .
*Внимание!* Аббревиатуру необходимо ввести корректно! В случае ошибок при вводе шаблон не будет развернут.
image::images/expanding-template-with-abb.png[]
. Имя класса метки-заполнителя ( ``*class_name*`` ) выбирается автоматически. Для перехода от одного заполнителя к другому можно использовать клавишу Tab. Можно сразу указать требуемое имя класса, которое будет перезаписано для метки-заполнителя. После завершения ввода нажмите ENTER. В среде IDE будет выбрано имя первой функции, которой в данном варианте является конструктор.
NOTE: Имена заменителей описываются более детально в разделе <<placeholder,Раздел имен заменителей>>.
image::images/select-constructor-name.png[]
. Отредактируйте имя функции или примите значение по умолчанию. Затем снова нажмите ENTER. Курсор переместится в тело функции. В реальном сценарии после этого начинается кодирование функции и остального класса.
Итоговое положение курсора определяется параметром ``${cursor}`` . Этот параметр описывается в разделе <<reserved-name,Зарезервированные имена>>.
=== Вставка шаблона кода путем дополнения кода
Для вставки шаблона кода путем дополнения кода введите начало расширенного фрагмента (_не_ сокращение шаблона). Откроется диалоговое окно дополнения кода, в котором будет отображаться фрагмент.
*Для вставки шаблона кода нового класса путем дополнения кода выполните следующее:*
1. Введите в блоке PHP файла PHP значение ``cla`` .
2. Дождитесь открытия диалогового окна дополнения кода.
3. Выполните поиск шаблона нового класса, рядом с которым указана аббревиатура ( ``cls`` ). Развернутый шаблон отображается в рамке PHPDoc.
image::images/insert-template-with-cc.png[]
. Выберите шаблон нового класса и нажмите Enter. В среде IDE выполняется его вставка в код.
. Имя класса метки-заполнителя ( ``*class_name*`` ) выбирается автоматически. Для перехода от одного заполнителя к другому можно использовать клавишу Tab. Можно сразу указать требуемое имя класса, которое будет перезаписано для метки-заполнителя. После завершения ввода нажмите ENTER. В среде IDE будет выбрано имя первой функции, которой в данном варианте является конструктор.
image::images/select-constructor-name.png[]
. Отредактируйте имя функции или примите значение по умолчанию. Затем снова нажмите ENTER. Курсор переместится в тело функции. В реальном сценарии после этого начинается кодирование функции и остального класса.
=== Добавление шаблона вокруг кода
Вокруг кода можно добавить следующие шаблоны PHP:
* ``while``
* ``do``
* ``switch``
* ``if`` / ``elseif``
* ``try`` и ``catch``
* ``foreach``
* ``for``
* ``ob_start`` и ``ob_end_clean``
Кроме того, можно <<create,создать новый шаблон>>, который будет окружать код, если шаблон включает в себя <<complex,подсказку параметра>> `allowSurround`. (Выражаем благодарность за предоставленную информацию авторам блога link:http://www.mybelovedphp.com/2012/05/14/tips-for-using-the-netbeans-editor-for-kohana-and-kostache-mustache-templates-using-surround-with/[+ My Beloved PHP+].)
Чтобы добавить шаблон вокруг кода, выберите код и откройте диалоговое окно "Окружение...". Чтобы открыть диалоговое окно 'Окружить...', нажмите Alt-Enter или щелкните значок 'Подсказка' image:images/hint-icon.png[].
*Для добавления шаблона if(true) вокруг кода выполните следующее:*
1. Создайте блок PHP с переменными ``$a = true`` и ``$b = 10`` .
[source,php]
----
<?php$a = false;$b = 10;?>
----
. Выберите строку ``$b = 10;``
image::images/selected-variable.png[]
. Нажмите на значок 'Подсказка' image::images/hint-icon.png[] или нажмите Alt-Enter. Откроется диалоговое окно "Окружение...".
image::images/surround-hint.png[]
. Щелкните `` Surround with if{*true*){...``
image::images/surround-if-true.png[]
. В среде IDE строка ``$b = 10;`` будет окружена шаблоном ``if(*true*){... `` .
image::images/inserted-if-true.png[]
В среде IDE в качестве условия оператора ``if`` автоматически вставляется ближайшая предшествующая допустимая переменная. В данном варианте используется переменная ``$a`` , поскольку ``$a`` является логическим значением, а условие оператора ``if(*true*){} `` подразумевает логическую переменную. Более того, если переменная, вставленная в среде IDE в условие, неправильна, это условие автоматически выделяется для редактирования. Это означает, что ввод корректной переменной можно начать сразу после вставки шаблона. В этом случае выбрать переменную можно с помощью дополнения кода.
NOTE: . Шаблон ``if(*true*){}`` описывается подробно в разделе <<complex,Параметр, определяемый подсказками>>.
image::images/change-condition.png[]
Для выхода из условия оператора нажмите ENTER. Курсор переместится в соответствующее местоположение, в данном случае в конец строки ``$b = 10;`` . Пользователь может отредактировать условие и нажать ENTER или принять автоматически подставляемое условие, после чего нажать ENTER. В любом случае курсор будет перемещен из условия в соответствующее местоположение.
image::images/cursor-after-not-editing.png[]
image::images/cursor-after-editing.png[]
В следующем разделе редактирование параметров в развернутых шаблонах описано более подробно.
=== Изменение параметров в развернутых шаблонах
В разделах, посвященных вставке шаблонов в код, в среде IDE автоматически выбиралось имя класса для редактирования после развертывания шаблона нового класса. Также автоматически выбиралось имя условия для редактирования после развертывания шаблона ``if(*true*)`` . В данном разделе описаны другие возможности редактирования параметров в среде IDE в развернутых шаблонах.
*Одновременное редактирование нескольких экземпляров параметра:*
1. В пустом блоке PHP введите ``for`` и нажмите сочетание клавиш CTRL+ПРОБЕЛ для открытия дополнения кода. Выберите шаблон итерации (аббревиатура ``iter`` ) и нажмите Enter. В код будет вставлена новая итерация.
image::images/iter-cc.png[]
. В итерации в качестве параметров используются две переменных: ``$index`` и ``$array`` . Переменная ``$index`` выбирается для редактирования автоматически. (Для перемещения между параметрами используйте клавишу Tab.)
image::images/iteration1.png[]
Введите ``i`` . Все три экземпляра параметра ``$index`` изменятся на ``$i`` .
image::images/iteration2.png[]
. Нажмите Enter или Tab. Будет выбран параметр ``$array`` .
. Нажмите ENTER. Курсор переместится в тело метода итерации.
Функция реорганизации имен переменных в NetBeans позволяет изменить все экземпляры имени переменной путем редактирования только одного экземпляра. В данном разделе рассматривается ее использование для параметров шаблона.
Редактор PHP editor IDE NetBeans также помогает определить правильный метод для переменных.
*Привязка переменной в шаблоне к корректному методу:*
1. В пустом блоке PHP введите следующий код:
[source,php]
----
<?php$arr = array(new ArrayIterator($array()), new ArrayObject($array()));?>
----
. После строки с объявлением массива ``$arr`` введите ``fore`` и с помощью дополнения кода вставьте шаблон `` foreach`` (аббревиатура: ``fore`` ).
image::images/cc-foreach.png[]
. Поместите курсор в тело функции ``foreach`` (для перемещения курсора можно дважды нажать ENTER) и введите значение ``$value`` или введите только ``$`` и выберите ``$value`` из дополнения кода.
[source,php]
----
<?php$arr = array(new ArrayIterator($array()), new ArrayObject($array()));foreach ($arr as $value) {$value}?>
----
. После ``$value`` введите ``->`` . Дополнение кода обеспечивает корректные методы для переменной ``$value`` , значение которой можно получить из массива ``$arr`` .
image::images/value-method-cc.png[]
== Синтаксис шаблона кода PHP
IDE NetBeans обеспечивает шаблоны кодов для всех поддерживаемых языков. Некоторые элементы синтаксиса являются общими для всех языков. Другие специфичны для определенных языков. В данном разделе рассматривается наиболее релевантный общий синтаксис шаблонов, а также специфичный синтаксис шаблонов PHP.
Шаблон кода PHP может содержать код PHP и параметры шаблона. Шаблон PHP может содержать только код PHP, только параметры или код и параметры одновременно.
В синтаксисе параметров шаблона кода используется знак доллара ``$`` , за которым следует определение параметра в фигурных скобках ``{...}`` . В рамках этого синтаксиса параметры шаблона могут принимать четыре формы:
* произвольное <<placeholder,имя метки-заполнителя>>, например ``${SomeName}`` ;
* <<reserved-name,зарезервированное имя>> с указаниями по обработке для среды IDE;
* имя описательного параметра с набором <<complex,подсказок для определения параметра>>;
* <<pre-defined,предварительно определенные параметры>>.
В следующих разделах рассматриваются все формы параметров шаблона кода.
NOTE: ``$$${VARIABLE...} `` Иногда отображается шаблон кода PHP во фрагментах, где синтаксис состоит из трех знаков доллара, после которых стоят фигурные скобки ``$$${...}`` . В этом случае шаблон кода содержит переменную и ее имя. Здесь знак доллара пропущен, и в синтаксисе присутствует двойной знак доллара ``$$`` , за которым следует параметр имени переменной ``${VARIABLE...}`` . Например, шаблон кода ``catch ${Exception} $$${exc}`` расширяется как [examplecode]# ``catch Exception $exc`` #.
=== Имя метки-заполнителя
В самом простом случае параметр шаблона кода является произвольным значением метки-заполнителя. При развертывании шаблона это имя метки-заполнителя выбирается в среде IDE для редактирования.
Например, в шаблоне нового класса ``(cls)`` , который в данном учебном курсе приводится в качестве примера в разделах <<define,Заданные шаблоны кода PHP>> и <<expand-with-abb,Расширение шаблона кода путем ввода аббревиатуры с нажатием клавиши TAB>>. Развернутый текст шаблона нового класса начинается с ``class ${className}`` . В данном случае ``class`` это код PHP, а ``${className}`` параметр. Этот параметр является произвольным значением метки-заполнителя для имени класса. При развертывании шаблона в среде IDE ``${className}`` преобразуется в ``*class_name*`` . Предполагается, что ``*class_name*`` является только лишь значением метки-заполнителя, и это значение автоматически предлагается для редактирования.
image::images/expanding-template-with-abb.png[]
=== Зарезервированные имена
В среде IDE резервируются два имени параметра, используемые в качестве указаний по обработке.
* ``${cursor}`` определяет местоположение курсора после завершения редактирования всех автоматически выбранных значений в развернутом шаблоне.
* ``${selection}`` определяет положение для вставки содержимого, выбранного редактором. Этот параметр используется так называемыми "шаблонами выбора", которые всегда отображаются в качестве подсказок при выборе текста в редакторе. Если шаблон включает параметр ``${selection}`` , он всегда относится к тому же местоположению, что и ``${cursor}`` .
Например, обратитесь еще раз к шаблону нового класса ``(cls)`` , который рассматривается в разделах <<define,Заданные шаблоны кода PHP>> и <<expand-with-abb,Расширение шаблона кода путем использования аббревиатуры с нажатием клавиши Tab>> данного учебного курса. Он содержит два параметра-заполнителя имени, ``${ClassName}`` и ``$__construct`` . В теле функции содержатся параметры ``${cursor}`` и ``${selection}`` .
[source,php]
----
class ${ClassName} {function ${__construct} {${selection}${cursor}}}
----
После развертывания шаблона параметр метки-заполнителя ``*class_name*`` выбирается автоматически (1). Нажмите Enter, и заполнитель ``*__construct*`` будет выбран автоматически (2). Другие значения для редактирования отсутствуют. Нажмите Enter еще раз, и указатель мыши переместится в положение, заданное параметром ``${cursor}`` в тексте шаблона (3).
image::images/cursor-position-changes.png[]
=== Параметр, заданный с помощью подсказок
Параметр может содержать произвольное описательное имя В ВЕРХНЕМ РЕГИСТРЕ и одну или несколько подсказок.
[source,php]
----
${PARAMETER_NAME hint1[=value] [hint2...hint n]}
----
Имя не отображается в коде. Однако оно необходимо при многократном использовании параметра в шаблоне кода. В этом случае параметр определяется только один раз, после чего может подставляться по имени. Например, в следующем шаблоне кода параметр ``${CONLINK}`` определяется только один раз, а затем два раза подставляется по имени.
[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}
----
Подсказки в среде IDE используются для расчета значения параметра шаблона при развертывании шаблона кода. Рассмотрим шаблон ``if(*true*)`` , описанный в данном учебном курсе в разделе, посвященном <<surround-code,добавлению шаблона вокруг кода>>. В этом шаблоне развернутый текст выглядит следующим образом:
[source,php]
----
if (${CONDITION variableFromPreviousAssignment instanceof="boolean" default="true"}) {${selection}${cursor}}
----
Проверьте параметр ``${CONDITION variableFromPreviousAssignment instanceof="boolean" default="true"}`` . Этот параметр задает условие оператора ``if`` . Поэтому ему присваивается имя CONDITION. Первой подсказкой будет ``variableFromPreviousAssignment`` , а второй - ``instanceof="boolean"`` . Сочетание этих двух подсказок в среде IDE говорят о необходимости поиска ближайшей логической переменной, которая присвоена в коде, предшествующем шаблону кода. Добавьте третью подсказку ``default="true"`` , и параметр будет определять условие "если значение ближайшей предшествующей логической переменной верно".
Например, если строка ``$b = 10`` в следующем фрагменте кода окружена шаблоном кода `` if(*true*) `` :
image::images/selected-variable.png[]
в среде IDE выполняется поиск ближайшей логической переменной, присвоенной ранее, результатом которого является ``$a`` , после чего создается оператор ``if`` с условием ``$a`` [=true]. Условие автоматически выбирается для редактирования, и программист PHP может изменить ``$a`` на другую переменную или на ``!$a`` .
image::images/inserted-if-true.png[]
В следующей таблице перечислены подсказки, используемые в шаблонах кода PHP, с описаниями.
|===
|Подсказка |Описание
| ``newVarName`` |Значение параметра должно быть новым не использованным ранее именем переменной. Обычно используется вместе с подсказкой ``default`` .
| ``1521 (по умолчанию)`` |Значение параметра по умолчанию.
| ``instanceof=""`` |Тип переменной PHP, заданной параметром.
| ``variableFromPreviousAssignment`` |Значение параметра ближайшая предшествующая переменная. Обычно используется вместе с подсказками ``instanceof `` и ``default`` .
| ``variableFromNextAssignmentName`` |Значение параметра имя ближайшей переменной, присвоенной после шаблона кода. Обычно используется вместе с подсказкой ``default`` .
| ``variableFromNextAssignmentType`` |Значение параметра тип ближайшей переменной, присвоенной после шаблона кода. Обычно используется вместе с подсказкой ``default`` .
| ``editable=false`` |Значение параметра невозможно отредактировать после развертывания шаблона.
| ``allowSurround`` |Позволяет использовать шаблон для <<surround-code,окружения кода>>.
|===
== Создание собственных шаблонов кода
Пользователи могут создать собственные шаблоны кода в IDE NetBeans. В данном разделе описывается создание шаблонов кода и их синтаксис, а также предлагаются некоторые полезные шаблоны.
*Для создания шаблона кода выполните следующее:*
1. Выберите команды "Средства" > "Параметры" ("NetBeans > Параметры" в системе Mac), перейдите к функциям редактора и откройте вкладку "Шаблоны кода".
image::images/code-template-options.png[]
. Нажмите 'Создать'. В результате откроется диалоговое окно 'Создание шаблона кода'. Введите аббревиатуру для шаблона и нажмите кнопку "ОК".
image::images/new-abb.png[]
. В таблицу шаблонов кода будет добавлена новая строка. Она содержит только введенную аббревиатуру. Курсор будет автоматически расположен на вкладке "Расширенный текст". Код шаблона можно ввести прямо на этой вкладке.
NOTE: Описание синтаксиса расширенного текста шаблона кода см. в разделе <<syntax,Синтаксис шаблона кода PHP.>>
image::images/new-abb-text.png[]
Далее описаны некоторые варианты создания собственных шаблонов кода PHP. Предложить собственные варианты можно на link:http://forums.netbeans.org/php-users.html[+форуме пользователей PHP.+]
=== Вариант использования: вставка PHP в HTML
При необходимости частой вставки фрагментов PHP в блок HTML можно создать шаблон кода HTML для вставки кода PHP без ввода ``<?php ?>`` .
Следующий шаблон кода используется для вставки в HTML оператора PHP ``echo`` .
|===
|Язык: |HTML
|Аббревиатура: |php
|Развернутый текст: |
[source,php]
----
<?php echo ${cursor ?>
----
|===
image::images/uc-php.png[]
=== Вариант использования: Joomla
Шаблоны кода можно использовать для платформы PHP в IDE NetBeans, особенно для платформ, в которых отсутствует встроенная поддержка. Далее приведен шаблон кода, разработанный для Joomla.
|===
|Язык: |PHP
|Аббревиатура: |joomdef
|Развернутый текст: |
[source,php]
----
defined('_JEXEC')or die('Restricted access');${cursor}
----
|===
image::images/uc-joomdef.png[]
=== Вариант использования: соединение с MySQL
Разработчикам PHP часто требуется установить соединение с базой данных MySQL. Это можно сделать с помощью шаблона кода. Переменная, присваиваемая соединению с MySQL, содержит имя метки-заполнителя `` link`` . Обратите внимание на использование трех знаков доллара ``$$$`` . На самом деле это двойной знак, который при развертывании преобразуется в один знак с последующим указанием параметра для имени переменной.
|===
|Язык: |PHP
|Аббревиатура: |my_con
|Развернутый текст: |
[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[]
=== Вариант использования: действие в контроллере Zend
Вместо использования мастера NetBeans для создания действия для вставки действия в контроллере Zend Framework, например ``indexController{}`` , можно использовать шаблон кода.
|===
|Язык: |PHP
|Аббревиатура: |zf_act
|Развернутый текст: |
[source,php]
----
public function ${functionName}Action () {${selection}${cursor} }
----
|===
image::images/uc-zfact.png[]
=== Вариант использования: элемент формы Zend
Этот шаблон используется для вставки элемента в форму Zend. Он применяется после создания формы с помощью команды Zend ``create form <name>`` .
|===
|Язык: |PHP
|Аббревиатура: |zf_element
|Развернутый текст: |
[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[+Отправить отзыв по этому учебному курсу+]
== Дополнительные сведения
Для получения дополнительных сведений о технологии PHP на сайте link:https://netbeans.org/[+netbeans.org+] можно воспользоваться следующими материалами:
* link:../java/editor-codereference.html[+Работа с кодом в редакторе Java IDE NetBeans+]. Справочное руководство по функциям помощника при работе с кодом IDE NetBeans, включая шаблоны кода и запись макросов.
* link:http://forums.netbeans.org/php-users.html[+Форум пользователей PHP для NetBeans+]
* link:http://blogs.oracle.com/netbeansphp/[+Сетевой журнал NetBeans для PHP+]. Сетевой журнал, который ведут разработчики редактора PHP для NetBeans. Здесь можно узнать обо всех новых функциях и усовершенствованиях.
Для отправки комментариев и предложений, получения поддержки и новостей о последних разработках, связанных с PHP IDE NetBeans link:../../../community/lists/top.html[+присоединяйтесь к списку рассылки users@php.netbeans.org+].