As I explained in my previous post, I've been on the hunt for a new PHP IDE. During past searches for this type of tool, I've always taken a glance at NuSphere's PhpED and usually went away screaming rather quickly because of how clunky, ugly, and just plain annoying the interface was (keep reading, though, they fixed this!). My last look at PhpED was verison 5.2 quite some time ago -- it was a good improvement over previous PhpED versions, but it couldn't compete with the Eclipse-based options (at least in the terms that mattered to me).
Which brings me to an important note: what I look for in an IDE is probably not exactly what another coder will look for in an IDE. From what I've experienced, choice of tools for most coders is 50% features/capabilities and 90% preference (oh hai, math!). For me, here is a list of features that are important:
- Clean, tabbed, highly customizable interface
- Fast (operation, not necessarily start-up)
- Good project/file management
- Good/customizable syntax highlighting
- Real-time, remote debugging
- Code insight/navigation/etc
- High degree of configurability (keyboard shortcuts, behavior of UI elements, etc)
- Version control integration (SVN specifically)
- Integration with other parts of my workflow (SSH, MySQL, [S]FTP, etc)
- And as we saw with Zend, update regularity is important to me (especially if I pay for it)
My First Day with PhpED
I went to NuSphere's site, which still feels a little underwhelming for some reason, and downloaded, installed, and activated the PhpED Professional trial. PhpED installed easily and quickly, and getting an activation code for the trial was simple and fast.
I knew I wanted to be able to do some real-time debugging on the Linux box under my desk, so I followed NuSphere's instructions on how to install their DBG debugger extension for PHP. I was pleased that their debugger installed without any trouble on PHP 5.2 on my Ubuntu 8.04 server. When starting a new project, you drop a dbg-wizard.php file into the docroot and PhpED test debugger functionality, providing you with feedback on any changes you should make to your server configuration -- such as disabling APC. I was impressed at the ease of the debugger setup. Oh, and compared to Zend's remote debugger, DBG is fast.
Next I wanted to pull my existing projects into PhpED. I work on a Vista machine that mounts a samba share containing the various docroots from my local Linux web server so I can edit files and test the local version of the site immediately without any bothersome file transfers to interrupt the process. PhpED's workspace/project setup easily and specifically accounted for this arrangement with some simple questions during the new project wizard. I just told PhpED that I work with local files that the web server also has access to, gave PhpED details about the docroot and URL, and PhpED pulled in each project tree flawlessly.
My next stop was syntax highlighting. During the very brief sting that I worked with TextMate, I fell in love with their default syntax highlight color schemes because they are easy on my poor coder eyes. PhpED's syntax highlight settings were easy to find and configure, resulting in a code interface that I was familiar and comfortable with.
One of the things I love about Eclipse is the incredibly customizable nature of its window interface. You can dock just about any window anywhere in the IDE, collapse them, temporarily expand them, split views -- just about anything I want. While Eclipse has spoiled me in this regard, I was pleased to find that PhpED is fairly customizable as well. While PhpED can't do everything Eclipse can as far as customizing the interface, PhpED does enough for me to get the interface arrangement I like (only code is visible with pop-out tabs on either side for supporting features like project navigation, reference, etc).
PhpED doesn't include SVN integration out-of-the-box, but their workspace/project navigator provides easy access to the Windows shell menu. This means that since I have TortoiseSVN installed, I was able to easily work with my SVN working copies. While I don't feel that this is an ideal arrangement, it works and doesn't slow me down. I'd like to see tighter integration between PhpED and SVN -- even if it's in the form of more tightly integrating with TortoiseSVN. While I haven't tried this yet, it looks like there may be ways to get some tighter integration now.
Another way in which I'm spoiled with code editors is how some will do little but meaningful things to help you code faster. Of particular interest and use to me is when the editor will auto-close brackets, parenthases, and quotes, then intelligently handle the code when you close them yourself (ie: not adding any additional, unwanted closing characters). Zend Studio does this fairly nicely (though it gets confused sometimes), and a lot of PHP editors out there that I've tried make an attempt at this but end up being more annoying than with the feature off. PhpED, however, has implemented this type of code typing help very well. PhpED intelligent closes and manages brackets and such, pops up useful help when typing a function, and has fast, effective completion options. PhpED for another win here.
I was pretty happy with PhpED having discovered all the things I've already covered... but I became somewhat thrilled with PhpED when I discovered its DB Client and Terminal windows. PhpED lets you easily connect to many databases, browser their structure and data, and even directly query them right from within the IDE. Their terminal integration allows you to SSH (or telnet) and have the terminal window exist seamlessly inside the IDE as well. To be fair, Zend Studio has these features as well in its Remote System Management module -- but that feature is clumsy, hard to use, and often doesn't quite work right. PhpED's implementation of these features, however, is sensible, fast, and easy to use.
I'm pleased to say that through my whole week working with PhpED, I continued to discover new little shortcuts and features that made my life as a coder just a little bit better. PhpED has some very minor annoyances (ie: left arrow at beginning of line does not move cursor to end of previous line UPDATE: you can configure this to work like other editors!), but these are things that I've been able to quickly overlook. At the end of the week, I'm very happy with PhpED -- in fact, I think I'm almost ready to give NuSphere my money.
I kept a text document open all week and have collected pros, cons, better than Zend Studio for Eclipse (ZSE), worse than ZSE, nifty, and silly features.
- Syntax highlight pretty customizable
- Decent filesystem-based workspace/project management
- Configurable shortcuts
- Configurable IDE layout (can hide stuff for maximum code area)
- Smart handling of brackets, parenthases, quotes, etc
- Excellent debugger/profiler that just works
- Intelligent project configuration
- Good external tool integration
- Excellent DB client
- Excellent terminal/SSH client
- Excellent and extensible help integration
- Find declaration
- Shows PHPDoc data
- Code folding that doesn't make me want to shoot myself
- Good code navigator/explorer
- Handy features available on side of every editor tab
- Floating of tabs is handy, esp. with multiple monitors
- Pretty configurable (lets me turn annoying stuff off)
- Lets you scroll past EOL
- Intelligent PHPDoc start (auto-populates param statements)
- No plugin system that I can see
- Would rather see built-in SVN support than relying on Tortoise
- No line number color change on changed lines to show diffs from saved version
- No X on tabs
- Can't lock toolbars
- No code formatting? Maybe I just haven't found it?
- Behavior of unpinned windows seems a little off
- Left arrow at beginning of line does not go to end of previous line
Better than ZSE:
- Faster refresh of code warnings/errors
- Syntax highlight settings doesn't mess with popups
- CSS editing faster, better
- Debugger install was relatively easy and worked the first time
Worse than ZSE:
- No plugin repository for adding nifty features
- Dynamic highlight mode
- "Full Screen" mode
- Popup PHPDoc help when using a function destroys PHPDoc formatting (indents, etc)
- Popup function help doesn't show defaults used in function declaration