<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    <title>O Editor PHP no NetBeans IDE 6.9-7.0 (Visualização)</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
    <link rel="stylesheet" type="text/css" href="../../../netbeans.css">
  </head>
  <body>
    
    
    <h1>O Editor PHP no NetBeans IDE 6.9-7.0 (Visualização)</h1>
    
    <table>
      <tr>
      <td class="valign-top">
          
          <p>
            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.
          </p>
          <p>Autor: Roman Strobl<br> Duração: 5:10 <br> <a href="https://netbeans.org/files/documents/4/2028/php_demo.zip" target="_blank">Download</a> ( 6.35 MB )
          </p>
          <p><br></p>
          
          <p><b>Links relacionados</b></p>
          <ul>
            <li><a href="../../../kb/docs/php/editor-screencast.html">Screencast do Editor PHP do NetBeans IDE 6.9-7.0 de Petr</a>
            <li><a href="../../../features/php/index.html">NetBeans IDE para PHP</a>
            <li><a href="../../../kb/trails/php.html">A Trilha de Aprendizado do PHP</a>
            <li><a href="http://blogs.oracle.com/netbeansphp/" target="_blank">Weblog sobre NetBeans para PHP</a>
          </ul>
          <div class="feedback-box" style="float:left">
            <a href="../../../about/contact_form.html?to=3&subject=Feedback: Roman's 6.5 PHP Editor screencast">Enviar Feedback neste Tutorial</a>
          </div>
          <br style="clear:both;">
        </td><td width="425" class="valign-top" class="align-center">
          
          <script type='text/javascript'>
            var var_pid = "6656";
            var var_furl = "http://netbeans.tv/images/";
            var var_notPanorama = "0";
            var var_altLink = "https://netbeans.org/files/documents/4/2028/php_demo.zip";
          </script>
          
          <div id="videoPlayer" class="video">
          <p>Não é possível carregar o Flash player.</p></div>
          
          <script type="text/javascript">

            <!--
            var so = new SWFObject(var_furl+"playerWidget.swf" , "pv", "410", "331", "8", "#666666");
            so.addParam("quality", "high");
            so.addParam("allowScriptAccess", "sameDomain");
            //so.addParam("menu", "false");
            so.addParam("allowFullScreen", "true");
            so.addVariable("autoPlay", "false");
            so.addVariable("urlFileIdList", var_pid);
            so.addVariable("show_title", "true");
            so.addVariable("PLAY_CALLBACK","emphasize");
            so.addVariable("resizeLimitMax","true");
            so.addVariable("lang", "en");
            so.addVariable("flash_play","true");
            so.addVariable("author_name","NetBeans.tv");
            so.addVariable("configUrl",'http://sun.ora.ma/config.sun.ora.ma.xml');
            if (var_notPanorama == '1')
            {
              so.addVariable("clickAction","clickAction");
            }
            so.write("videoPlayer");
            // -->

          </script>
          
      </td></tr>
    </table>
    
  </body>
</html>
