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

.PHP Tutorials
************************************************
- link:editor-screencast_zh_CN.html[NetBeans 6.5 中 PHP 支持的演示 - 第 II 部分：编辑器功能]
- link:project-config-screencast_zh_CN.html[NetBeans 6.5 中 PHP 支持的演示 - 第 I 部分：项目和配置]
- link:php-editor-screencast_zh_CN.html[NetBeans IDE 6.9-7.0 中的 PHP 编辑器（预览）]
- link:quickstart_zh_CN.html[NetBeans IDE PHP 快速入门教程]
- link:namespace-code-completion-screencast_zh_CN.html[NetBeans IDE 中的 PHP 名称空间支持]
- link:index_zh_CN.html[PHP Tutorials]
- link:section_zh_CN.html[]
- link:wish-list-tutorial-main-page_zh_CN.html[使用 NetBeans IDE PHP 编辑器创建数据库驱动的应用程序]
- link:remote-hosting-and-ftp-account_zh_CN.html[使用 NetBeans IDE 在远程 Web 服务器上部署 PHP 应用程序]
- link:screencast-phpdoc_zh_CN.html[使用 NetBeans IDE 生成 PHP 文档]
- link:phpunit_zh_CN.html[使用 PHPUnit 和 Selenium 进行测试]
- link:wish-list-lesson1_zh_CN.html[使用 PHP 创建数据库驱动的应用程序]
- link:wish-list-lesson2_zh_CN.html[使用 PHP 创建数据库驱动的应用程序]
- link:wish-list-lesson3_zh_CN.html[使用 PHP 创建数据库驱动的应用程序]
- link:wish-list-lesson4_zh_CN.html[使用 PHP 创建数据库驱动的应用程序]
- link:wish-list-lesson5_zh_CN.html[使用 PHP 创建数据库驱动的应用程序]
- link:wish-list-lesson6_zh_CN.html[使用 PHP 创建数据库驱动的应用程序]
- link:wish-list-lesson7_zh_CN.html[使用 PHP 创建数据库驱动的应用程序]
- link:wish-list-lesson8_zh_CN.html[使用 PHP 创建数据库驱动的应用程序]
- link:wish-list-lesson9_zh_CN.html[使用 PHP 创建数据库驱动的应用程序]
- link:wish-list-oracle-lesson1_zh_CN.html[使用 PHP 创建数据库驱动的应用程序]
- link:flickr-screencast_zh_CN.html[使用 PHP 构建 Flickr 幻灯片]
- link:configure-php-environment-ubuntu_zh_CN.html[在 Linux Ubuntu 中配置 PHP 开发环境]
- link:configure-php-environment-mac-os_zh_CN.html[在 MAC OS X 中配置 PHP、Apache、MySQL 和 Xdebug for PHP 开发]
- link:debugging_zh_CN.html[在 NetBeans IDE 中调试 PHP 源代码]
- link:php-variables-screencast_zh_CN.html[在 NetBeans PHP Editor 6.7 中声明注释中的变量和相关的代码完成功能]
- link:configure-php-environment-windows_zh_CN.html[在 Windows 中配置 PHP 开发环境]
- link:screencast-continuous-builds_zh_CN.html[持续构建服务器上的 PHP 支持]
- link:ajax-quickstart_zh_CN.html[用于 PHP Web 应用程序的 Ajax 简介]
- link:project-setup_zh_CN.html[设置 PHP 项目]
- link:screencast-rename-refactoring_zh_CN.html[适用于 PHP 的 NetBeans IDE 7.0 中的重命名重构和其他编辑器改进]
- link:screencast-smarty_zh_CN.html[适用于 PHP 的 NetBeans IDE 中的 Smarty 支持]
- link:zend-framework-screencast_zh_CN.html[适用于 PHP 的 NetBeans IDE 中的 Zend 框架支持]
- link:code-templates_zh_CN.html[适用于 PHP 的 NetBeans IDE 中的代码模板]
************************************************


