// 
//     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 的 NetBeans IDE 7.0 中的重命名重构和其他编辑器改进
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: 适用于 PHP 的 NetBeans IDE 7.0 中的重命名重构和其他编辑器改进 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, 适用于 PHP 的 NetBeans IDE 7.0 中的重命名重构和其他编辑器改进

|===
|此截屏视频说明了 NetBeans PHP Editor 7.0 的新功能。

* *重命名重构*：您可以在项目的所有文件中重命名某个元素，如类名。该功能强制您在进行更改之前预览所做的更改。预览窗口显示元素的每个位置，并允许将元素的个别实例从重命名操作中排除。与重命名重构对应的旧功能是即时重命名，后者只能用于重命名文件中的元素，而不提供预览窗口。
* *类型分层结构视图*：查看 PHP 类的所有超类型和子类型，包括接口以及实现接口的类。
* *自动换行*：可以将编辑器配置为自动换行。
* *显示不可打印的字符*：可以在编辑器中显示和隐藏不可打印的字符。

作者：Jeff Rubinoff
播放时长：8:47 
link:http://bits.netbeans.org/media/rename-refactoring.flv[+下载+] [18.3MB]

link:/about/contact_form.html?to=3&subject=Feedback: PHP Rename Refactoring Screencast[+发送有关此教程的反馈意见+]
 |   
|===
