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

= Поддержка платформы Zend в IDE NetBeans для PHP
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Поддержка платформы Zend в IDE NetBeans для PHP - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Поддержка платформы Zend в IDE NetBeans для PHP

|===
|В этой экранной демонстрации описывается разработка приложений PHP с помощью платформы Zend в IDE NetBeans. Поддержка платформы Zend реализована в IDE NetBeans версии 6.9

Автор: Джеф Рубинов (Jeff Rubinoff)
Продолжительность: 11:52 
link:http://bits.netbeans.org/media/zf.flv[+Загрузить+] [30,2 МБ]

link:/about/contact_form.html?to=3&subject=Feedback: Zend Framework Support Screencast[+Отправить отзыв по этому учебному курсу+]
 
|===

  

