// 
//     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.
//

= O Editor PHP no NetBeans IDE 6.9-7.0 (Visualização)
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: O Editor PHP no NetBeans IDE 6.9-7.0 (Visualização) - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, O Editor PHP no NetBeans IDE 6.9-7.0 (Visualização)

|===
|Roman Strobl mostra um build de desenvolvimento de novas funcionalidades do PHP no NetBeans IDE 6.9-7.0. Um projeto PHP pode ser automaticamente implantado em um Web server local, em u m site remoto (via FTP) ou você pode executar o script na linha de comandos. O Editor PHP no NetBeans IDE 6.9-7.0 oferece suporte a todas as funcionalidades padrão, como autocompletar código, destaque de sintaxe, marcação de ocorrências, refatoração, modelos de código, pop-up de documentação, navegação de código, advertências do editor e lista de tarefas.

Autor: Roman Strobl
Duração: 5:10 
link:https://netbeans.org/files/documents/4/2028/php_demo.zip[+Download+] ( 6.35 MB )


*Links relacionados*

* link:../../../kb/docs/php/editor-screencast.html[+Screencast do Editor PHP do NetBeans IDE 6.9-7.0 de Petr+]
* link:../../../features/php/index.html[+NetBeans IDE para PHP+]
* link:../../../kb/trails/php.html[+A Trilha de Aprendizado do PHP+]
* link:http://blogs.oracle.com/netbeansphp/[+Weblog sobre NetBeans para PHP+]
link:../../../about/contact_form.html?to=3&subject=Feedback: Roman's 6.5 PHP Editor screencast[+Enviar Feedback neste Tutorial+]
 |

Não é possível carregar o Flash player.

 
|===
