PHP DevCenter

oreilly.comSafari Books Online.Conferences.

We've expanded our LAMP news coverage and improved our search! Search for all things LAMP across O'Reilly!

Search
Search Tips

advertisement

Listen Print Discuss Subscribe to PHP Subscribe to Newsletters

Looking into Zend Studio 3.0

by John Coggeshall
10/23/2003

In early September, Zend launched the new version of their PHP development environment Zend Studio 3.0, which, by many accounts, is a drastic step forward in PHP development technologies. I've acquired a copy of the new Studio, and today I'll try to give you a reasonable rundown of what this new Studio is all about and if it is worth its price tag.

I've been a PHP developer for a long time, using many different development environments in my PHP projects. When I was asked to do a review of the new Zend Studio, I decided that the best way to really judge it was to actually use it in my day-to-day development. So for a week, I set aside my trusted ActiveState Komodo 2.5 and sat down with Zend Studio 3.0. Here is what I found, what I liked, and how it compared to what I was expecting.

What I Liked

From installation to development, there is one word that I can use to describe Zend Studio 3.0 — easy. Unlike many other PHP-supporting development environments, Zend Studio was incredibly intuitive. Installation on both Windows and Linux platforms (I used Red Hat 8) was quick and simple, requiring little effort to get myself started in development. Once installed, the first thing I noticed when comparing it to previous versions was a drastic increase in speed. Zend Studio 3.0 loaded faster and, as I found, responded nicely no matter how quickly I typed, clicked, or stressed the environment. I must say, I didn't expect this performance from a Java-based application. This was quite the pleasant surprise.

Once the studio was installed, I began immediately using it in the development of a PHP project I was working on. Immediately, I was impressed with the intuitive nature of the environment. Although many environments support things like syntax highlighting, Zend Studio took things a step further with integration with many resources I use on a day-to-day basis, such as the online PHP manual, FTP servers, and CVS repositories. A tabbed sidebar let me open documents from the local filesystem, a project, and remote locations via FTP, as well as browse the complete PHP function list. In larger projects, opening multiple scripts is handled nicely by assigning each open file a tab for easy switching. Zend Studio also boasts a robust syntax-highlighting-and-checking and code-completion system that I found very easy to use. (It even supported the still-beta PHP 5 syntax.)

What's Missing

With all of the positives Zend Studio provides, when compared to other environments I have used which cater to PHP, there are a few features I missed. For instance, the lack of any sort of split-pane viewing of scripts (very useful for very large PHP scripts), the inability to un-dock or otherwise move panes within the environment, and the lack of any sort of internal HTML rendering were some major features I found missing.

Editor's Note: Jason Halla points out, "Actually, you can move & re-dock each of the workspace windows in Studio (such as the File System or Output windows). Go to Tools | Customization | Desktop. Look for the 'Dock workspace windows' option — set the drop-down menu to "Enabled". Hit Apply. Now you can drag and drop the workspace windows wherever they suit you best."

Interesting Features

Once you scratch the surface of the Zend Studio, you find that it contains several incredibly valuable tools that can drastically reduce the amount of time needed to develop large-scale PHP applications. From conception to completion, Zend Studio has something for every phase of an application's life cycle.

Note: Although Zend Studio 3.0 does provide support for new PHP 5/Zend Engine 2 syntax, it does not yet provide debugging or profiling capabilities for PHP 5. It is reported that support for these features in PHP 5 will be released following the Beta 2 release of PHP 5.

The first and most commonly sought feature is the studio's remote debugging capabilities. Zend Studio 3.0 supports line-by-line debugging of PHP scripts remotely from within the development environment itself. The debugger is by all measures full-featured, with support for breakpoints, step-throughs, stack traces, and variable watching. It even allows you to preview the contents of the current output buffer. Zend Studio also provides a useful code analyzer, which can help quickly and easily point out common potential problems in your scripts that can lead to both bugs and security vulnerabilities. During my trials of the Studio, I used these features extensively and was quite impressed with how quickly they assisted me in the development of quality PHP scripts.

Since every time a web page powered by PHP is executed, the entire PHP script behind that page is executed, efficiency in large-scale enterprise applications becomes a critical component to success. Once an application has been debugged and is functioning properly, the next logical step is to make each of your scripts function as efficiently as necessary. For this purpose, Zend Studio provides an invaluable remote profiling tool — one of the single biggest strengths of the new Zend Studio. This tool allows developers to profile a script on a function-by-function basis to identify the amount of time each step of execution took to complete. This information can be displayed as a simple itemized list or as a pie chart, allowing you to quickly and easily identify potentially inefficient code in your applications. Even during my trials, I found several different functions and scripts within my own applications that were slower than they should have been. This tool is simply a must-have for anyone interested in developing large-scale enterprise applications in PHP.

On the Server

Beyond the Zend Studio IDE itself (in which you actually do the coding for your applications), an entirely separate facet of Zend Studio resides on your development web server. This server-side component provides the functionality within PHP that allows for the other aforementioned components such as the profiler and debugger to function. However, the server side of Zend Studio also provides a great deal of useful functionality completely independently of the client IDE. The Zend Server Center is a very useful PHP application which, when installed on your server, allows you quick and easy access to all of the configuration settings available in PHP, the Zend-Studio-specific configuration options, and a wealth of information regarding the server itself. Zend Studio also comes with the Zend Information Center, which serves as an online reference manual for the studio and can be accessed by any modern web browser.

Conclusions

When all is said and done, my opinion regarding this product was perfectly clear. When you take Zend Studio as a whole, there is no single product available on the market today that can help you become a more effective developer of PHP applications. For those developers who are looking for a PHP development environment, Zend Studio 3.0 is one of the best choices you can make.

John Coggeshall is a a PHP consultant and author who started losing sleep over PHP around five years ago.


Return to PHP DevCenter.


Have you used Zend Studio? What are your impressions?
You must be logged in to the O'Reilly Network to post a talkback.
Post Comment
Full Threads Oldest First

Showing messages 1 through 14 of 14.

  • breakpoint in remote debugging
    2004-09-08 16:48:21  Liumei [Reply | View]

    I am trying Zend Studio 3.0. I agree that Zend Studio provides me many valuable features, such as Call Trace.

    I have Zend client installed on a windows XP PC and Zend Server installed on a Redhat 9 box. The location of php scripts are on the Redhat box and are mapped as a local drive on the windows PC.

    However, I could only debug the code line-by-line but could not make the debugger stop at breakpoints when I debug remotely.

    I wonder whether the breakpoints in remote debugging work or not. If it does work, can anyone help me to figure out what I am missing?

  • key mapping on osx
    2003-12-02 15:19:21  maarky [Reply | View]

    For those of you who don't like the key mapping on os x go to Preferences->KeyMap. From there you can customize everything so that save is command-s for example.
  • CVS
    2003-11-21 02:35:47  anonymous2 [Reply | View]

    What I found really depressing is that you need to log on to your CVS server by command line (as stated in the manual), not via a kind of dialog in ZS3!
    Very unfriendly behaviour.
  • Used on Mac OS X
    2003-11-14 04:48:56  jmhowitt [Reply | View]

    I recently moved from Windows to Mac so am looking for a Homesite replacement . Zend is pretty good as described but i have two primary niggles.

    Keys. These are a mixture of Max and Windows. So sometime you are using the Apple Command Key + another key but sometimes the Ctrl Key + another. This got very confusing. Cut / Paste is Command + C or V but save is Crtl + S ican copt with them being all one or all the other but the mix was irritating.

    The second was the snippets folder. In HomeSite i have built up a whole block of short cuts and ... well snippets! Speeds me up no end but i couldn't find anything like it in Studio.

    Have reverted to Dreamweaver in 'HomeSite' mode.

    The things i liked were as in the main article but i especially liked the error reporting.
    • Used on Mac OS X
      2003-12-20 03:37:28  tve1 [Reply | View]

      Well as mention elsewhere on this page you are perfectly capable of creating your own shortcuts.

      I will be creating - when my time permits it - a complete Macintized version of the shortcuts. In general CTRL will be replaced with CMD (or META as I have found it to be called in the *NIX world)

      I have also changed the runExplorer.sh script to a generic one letting you preview the code in the OS' default browser in stead of the hardcoded IE :-)
      • Used on Mac OS X
        2004-01-21 02:18:59  johnkershaw1 [Reply | View]

        Here's the keymap I've been using for the last few weeks. I'm pretty happy with it - it's a cross between BBEdit and ScriptDebugger. If anyone has any tweaks or changes let me know.

        I also changed the runExplorer.sh script to use the default browser, but the 3.02 install put the original back. Rather than me rewriting it, can you mail me a copy of yours?

        John.

        <?xml version='1.0' encoding='UTF-8'?>

        <keyMap>
        <keyMapProperty id="editorComponent.openDocument" name="openDocument" displayKey="70">
        <values>
        <keyStroke keyCode="79" modifiers="260"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="79" modifiers="260"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="project.openProject" name="openProject" displayKey="77">
        <values>
        <keyStroke keyCode="79" modifiers="195"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="79" modifiers="195"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="editorComponent.newDocument" name="newDocument" displayKey="71">
        <values>
        <keyStroke keyCode="78" modifiers="260"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="78" modifiers="260"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="editnig.heading2Tag" name="heading2Tag" displayKey="510">
        <values>
        <keyStroke keyCode="50" modifiers="780"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="50" modifiers="130"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="cvs.add" name="add" displayKey="587">
        <values/>
        <initialvalues/>
        </keyMapProperty>
        <keyMapProperty id="phpEditorPane.forward" name="forward" displayKey="656">
        <values>
        <keyStroke keyCode="39" modifiers="780"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="39" modifiers="650"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="debugging.go" name="go" displayKey="84">
        <values>
        <keyStroke keyCode="82" modifiers="260"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="116" modifiers="0"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="project.checkIncludes" name="checkIncludes" displayKey="342">
        <values>
        <keyStroke keyCode="73" modifiers="195"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="73" modifiers="195"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="phpEditorPane.back" name="back" displayKey="655">
        <values>
        <keyStroke keyCode="37" modifiers="780"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="37" modifiers="650"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="debugging.gotoCursor" name="gotoCursor" displayKey="422">
        <values>
        <keyStroke keyCode="82" modifiers="325"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="121" modifiers="65"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="phpEditorPane.selectAll" name="selectAll" displayKey="738">
        <values>
        <keyStroke keyCode="65" modifiers="260"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="65" modifiers="260"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="completionTool.showCompletionList" name="showCompletionList" displayKey="67">
        <values>
        <keyStroke keyCode="10" modifiers="260"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="32" modifiers="130"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="editorComponent.saveAll" name="saveAll" displayKey="69">
        <values>
        <keyStroke keyCode="83" modifiers="650"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="83" modifiers="650"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="project.saveProject" name="saveProject" displayKey="79">
        <values>
        <keyStroke keyCode="80" modifiers="195"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="80" modifiers="195"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="editnig.italicTag" name="italicTag" displayKey="508">
        <values>
        <keyStroke keyCode="73" modifiers="325"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="73" modifiers="520"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="phpEditorPane.cut" name="cut" displayKey="53">
        <values>
        <keyStroke keyCode="88" modifiers="260"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="88" modifiers="260"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="editnig.heading3Tag" name="heading3Tag" displayKey="511">
        <values>
        <keyStroke keyCode="51" modifiers="780"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="51" modifiers="130"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="cvs.update" name="update" displayKey="584">
        <values>
        <keyStroke keyCode="85" modifiers="520"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="85" modifiers="520"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="phpEditorPane.find-prev" name="findPrev" displayKey="887">
        <values>
        <keyStroke keyCode="71" modifiers="325"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="71" modifiers="325"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="debugging.stepOut" name="stepOut" displayKey="83">
        <values>
        <keyStroke keyCode="85" modifiers="260"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="122" modifiers="65"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="editor.toggleStatusLine" name="addRemoveStatusLine" displayKey="65">
        <values>
        <keyStroke keyCode="87" modifiers="195"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="87" modifiers="195"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="debugging.addWatch" name="addWatch" displayKey="86">
        <values>
        <keyStroke keyCode="92" modifiers="325"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="119" modifiers="65"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="cvs.commit" name="commit" displayKey="583">
        <values>
        <keyStroke keyCode="67" modifiers="520"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="67" modifiers="520"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="phpEditorPane.beginLine" name="beginLine" displayKey="852">
        <values>
        <keyStroke keyCode="1000" modifiers="0"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="1000" modifiers="0"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="phpEditorPane.addRemovePHPBlockComment" name="addRemoveBlockCooment" displayKey="494">
        <values/>
        <initialvalues>
        <keyStroke keyCode="47" modifiers="195"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="phpEditorPane.redo" name="redo" displayKey="55">
        <values>
        <keyStroke keyCode="90" modifiers="325"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="90" modifiers="325"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="editnig.toLowerCase" name="toLowerCase" displayKey="739">
        <values>
        <keyStroke keyCode="76" modifiers="130"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="76" modifiers="130"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="completionTool.showFunctionArguments" name="showParametersList" displayKey="981">
        <values>
        <keyStroke keyCode="32" modifiers="390"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="32" modifiers="195"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="editnig.boldTag" name="boldTag" displayKey="507">
        <values>
        <keyStroke keyCode="66" modifiers="325"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="66" modifiers="130"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="phpEditorPane.print" name="print" displayKey="61">
        <values>
        <keyStroke keyCode="80" modifiers="260"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="80" modifiers="130"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="debugging.debugURL" name="debugURL" displayKey="85">
        <values>
        <keyStroke keyCode="119" modifiers="0"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="119" modifiers="0"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="phpEditorPane.gotoNextProjectBookmark" name="gotoNextProjectBookmark" displayKey="535">
        <values>
        <keyStroke keyCode="113" modifiers="65"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="113" modifiers="65"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="phpEditorPane.toggleBookmark" name="toggleBookmark" displayKey="777">
        <values/>
        <initialvalues>
        <keyStroke keyCode="113" modifiers="0"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="phpEditorPane.replace" name="replace" displayKey="58">
        <values>
        <keyStroke keyCode="70" modifiers="260"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="82" modifiers="260"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="phpEditorPane.removeAllBookmarks" name="removeAllBookmarks" displayKey="518">
        <values/>
        <initialvalues>
        <keyStroke keyCode="50" modifiers="650"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="editor.gotoLine" name="gotoLine" displayKey="64">
        <values>
        <keyStroke keyCode="74" modifiers="260"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="84" modifiers="650"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="editor.showRecentFiles" name="showRecentFiles" displayKey="670">
        <values>
        <keyStroke keyCode="82" modifiers="195"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="82" modifiers="195"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="phpEditorPane.paste" name="paste" displayKey="52">
        <values>
        <keyStroke keyCode="86" modifiers="260"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="86" modifiers="260"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="phpEditorPane.duplicateSelection" name="duplicateSelection" displayKey="501">
        <values>
        <keyStroke keyCode="68" modifiers="130"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="68" modifiers="130"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="application.findInFiles" name="findInFiles" displayKey="366">
        <values>
        <keyStroke keyCode="70" modifiers="780"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="70" modifiers="780"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="editnig.heading1Tag" name="heading1Tag" displayKey="509">
        <values>
        <keyStroke keyCode="49" modifiers="780"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="49" modifiers="130"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="editnig.breakTag" name="breakTag" displayKey="513">
        <values>
        <keyStroke keyCode="10" modifiers="520"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="10" modifiers="130"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="debugging.finishDebugger" name="stop" displayKey="339">
        <values>
        <keyStroke keyCode="46" modifiers="260"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="116" modifiers="65"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="debugging.profileURL" name="profileURL" displayKey="936">
        <values>
        <keyStroke keyCode="123" modifiers="0"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="123" modifiers="0"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="cvs.status" name="status" displayKey="602">
        <values/>
        <initialvalues/>
        </keyMapProperty>
        <keyMapProperty id="debugging.stepOver" name="stepOver" displayKey="81">
        <values>
        <keyStroke keyCode="89" modifiers="260"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="121" modifiers="0"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="debugging.stepInto" name="stepInto" displayKey="82">
        <values>
        <keyStroke keyCode="73" modifiers="260"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="122" modifiers="0"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="cvs.diff" name="diff" displayKey="612">
        <values/>
        <initialvalues/>
        </keyMapProperty>
        <keyMapProperty id="phpEditorPane.saveAs" name="saveAs" displayKey="60">
        <values>
        <keyStroke keyCode="83" modifiers="195"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="83" modifiers="195"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="phpEditorPane.undo" name="undo" displayKey="54">
        <values>
        <keyStroke keyCode="90" modifiers="260"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="90" modifiers="260"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="editnig.findMatchingBracket" name="findMatchingBracket" displayKey="514">
        <values>
        <keyStroke keyCode="66" modifiers="260"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="77" modifiers="130"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="debugging.serverConnection" name="serverConnection" displayKey="986">
        <values/>
        <initialvalues/>
        </keyMapProperty>
        <keyMapProperty id="editnig.toUpperCase" name="toUpperCase" displayKey="506">
        <values>
        <keyStroke keyCode="85" modifiers="130"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="85" modifiers="130"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="editor.functionHelpAction" name="functionHelpAction" displayKey="68">
        <values>
        <keyStroke keyCode="47" modifiers="260"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="112" modifiers="0"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="editor.toggleScrollsBar" name="addRemoveScrollsBar" displayKey="66">
        <values>
        <keyStroke keyCode="66" modifiers="195"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="66" modifiers="195"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="phpEditorPane.reformatCode" name="reformatCodeAction" displayKey="63">
        <values>
        <keyStroke keyCode="70" modifiers="325"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="70" modifiers="195"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="project.newProject" name="newProject" displayKey="78">
        <values>
        <keyStroke keyCode="78" modifiers="195"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="78" modifiers="195"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="codeAnalyzer" name="analyzeCode" displayKey="965">
        <values>
        <keyStroke keyCode="89" modifiers="390"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="65" modifiers="780"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="debugging.toggleBreakpoint" name="toggleBreakpoint" displayKey="80">
        <values>
        <keyStroke keyCode="92" modifiers="260"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="120" modifiers="0"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="application.openNextEntry" name="openNextEntry" displayKey="567">
        <values>
        <keyStroke keyCode="115" modifiers="0"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="115" modifiers="0"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="phpEditorPane.eraseLine" name="eraseLine" displayKey="62">
        <values>
        <keyStroke keyCode="69" modifiers="130"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="69" modifiers="130"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="phpEditorPane.delete" name="delete" displayKey="279">
        <values>
        <keyStroke keyCode="127" modifiers="0"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="127" modifiers="0"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="debugging.showInBrowser" name="showInBrowser" displayKey="299">
        <values>
        <keyStroke keyCode="123" modifiers="260"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="66" modifiers="520"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="phpEditorPane.saveFile" name="saveFile" displayKey="59">
        <values>
        <keyStroke keyCode="83" modifiers="260"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="83" modifiers="260"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="phpEditorPane.find-next" name="findNext" displayKey="57">
        <values>
        <keyStroke keyCode="71" modifiers="260"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="71" modifiers="260"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="phpEditorPane.find" name="find" displayKey="56">
        <values/>
        <initialvalues>
        <keyStroke keyCode="70" modifiers="260"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="phpEditorPane.copy" name="copy" displayKey="51">
        <values>
        <keyStroke keyCode="67" modifiers="260"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="67" modifiers="260"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="editorComponent.closeAll" name="closeAll" displayKey="289">
        <values>
        <keyStroke keyCode="87" modifiers="780"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="115" modifiers="325"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="cvs.checkout" name="checkout" displayKey="603">
        <values/>
        <initialvalues/>
        </keyMapProperty>
        <keyMapProperty id="debugging.run" name="run" displayKey="421">
        <values>
        <keyStroke keyCode="82" modifiers="780"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="116" modifiers="260"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="phpEditorPane.gotoNextBookmark" name="gotoNextBookmark" displayKey="517">
        <values>
        <keyStroke keyCode="113" modifiers="130"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="113" modifiers="130"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="phpEditorPane.addRemoveComment" name="addRemoveCooment" displayKey="493">
        <values/>
        <initialvalues>
        <keyStroke keyCode="47" modifiers="130"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="editorComponent.closeDocument" name="closeDocument" displayKey="72">
        <values>
        <keyStroke keyCode="87" modifiers="260"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="115" modifiers="260"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="phpEditorPane.openBookmarksDialog" name="openBookmarksDialog" displayKey="676">
        <values/>
        <initialvalues>
        <keyStroke keyCode="66" modifiers="650"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="phpEditorPane.endLine" name="endLine" displayKey="853">
        <values>
        <keyStroke keyCode="35" modifiers="0"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="35" modifiers="0"/>
        </initialvalues>
        </keyMapProperty>
        <keyMapProperty id="editnig.nbspTag" name="nbspTag" displayKey="874">
        <values>
        <keyStroke keyCode="32" modifiers="520"/>
        </values>
        <initialvalues>
        <keyStroke keyCode="192" modifiers="130"/>
        </initialvalues>
        </keyMapProperty>
        </keyMap>
  • No-one else had these problems ?
    2003-10-28 14:05:45  anonymous2 [Reply | View]

    I found that sections of the screen weren't refreshing, text was overlapped, menus had two items 'selected' (in blue) and very slow - it was unusable for me. I guessed it was the Java RE but couldn't overcome the problems with either seperate Sun JRE or the included Zend JRE. The Server component was problematic too with an inability to debug remotely. Meanwhile version 2.6 works fine on the same Win2k (for client) and Linux (for server) machines. Unfortunately I've had to remove it.
    Gary
    • No-one else had these problems ?
      2004-01-14 09:36:42  anonymous2 [Reply | View]

      I guessed it was the ebooks couldn't overcome the problems with either seperate Sun JRE or the included Zend JRE. The Server component was problematic too with an inability to debug remotely.
  • Wonderful Tool
    2003-10-27 10:36:57  altjeringa [Reply | View]

    I've been running Zend since 2.6 came out for Mac OS X an d I've got to say it's saved me tons of time. The current application I'm working on has over 60 classes. Zend includes all the methods for those classes in the code completion library. Major time saver! If I was doing alot of in-line development I don't know that Zend would be any better than using Dreamweaver (not the modules) or BBEdit but as an OO coder Zend is a life saver.

    On the downside there are still some OSX integration issues, mostly with key bindings being hard coded instead of use the key mask. This means some commands work with Apple+key and some still use the windows Control+key. Also I've had problems with project not loading properlly on start up.. but that's only on the work machine where my home directory is on the network server.

    Zend has come a long way. I highly recommend it for anybody building large scale php applications.
  • Zend Studio 3.0
    2003-10-24 12:01:43  anonymous2 [Reply | View]

    I agree. I've been using Zend Studio 3.0 for about 2-1/2 weeks now. I had also tried the latest offering from NuSpere, but after two days, I stayed with Zend Studio. This will replace my Home Site/Quanta Plus except for pure HTML coding. For my C coding, I use KWrite. Nice text based editor with good syntex highlighting. Can't imagine how I did coding before highlighting! Now that my MySQL Control center is installed and running, I find myself moving more and more from command-line entering and more to full-fledged IDE's, at least on a day-to-day basis.
    • Zend Studio 3.0
      2006-09-22 09:43:14  Bahoz [Reply | View]

      <HTML>
      <head>
      <META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
      <title>SesliCanlar.Com</title>
      <script language="javascript">
      <!--

      function checkLogin() {
      var username = new String(document.getElementById('edUsername').value);
      if (username.length>=3)
      return true
      else {
      window.alert('Kullanici Adinsz En Az 3 Harften Olusmalidir!');
      document.getElementById('edUsername').select();
      return false;
      }
      }
      //-->
      </script>
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
      <link href="from" rel="stylesheet" type="text/css" media="from">
      <style type="text/css">
      <!--
      body {
      background-color: #800000;
      }
      -->
      </style></head>
      <body text="#FFFFFF">
      <form method="post" action="Sohbet.php" onSubmit="JavaScript:return checkLogin();">

      <div align="left">


      <input type="hidden" name="action" value="login">


       


      <img src="images/On.gif" width="374" height="59" border="0">


      </div>
      <table bordercolor=#ffc062 height=275 cellspacing=0 cellpadding=0 width=340
      align=center border=10>
      <tbody>
      <tr>
      <td width="50%" height="255" valign=bottom bordercolor=#FFFFFF
      bgcolor=#841604 class=yazibold><table width="324" height="257" border="0" align="center" cellpadding="0" bordercolor="#800000" bgcolor="#800000" class="form">
      <tr bordercolor="#800000" bgcolor="#800000">
      <td colspan="2"><div align="center"><img src="images/sesgr.gif" width="222" height="22"></div></td>
      </tr>
      <tr>
      <td bgcolor="#800000"><img src="images/kuL.gif" width="211" height="22"></td>
      <td bgcolor="#800000"><input type="text" id="edUsername" size="14" maxlength="12" name="username"></td>
      </tr>
      <tr bgcolor="#800000">
      <td><img src="images/sifre.gif" width="209" height="22"></td>
      <td><input type="password" id="edPass" size="14" maxlength="30" name="password"> </td>
      </tr>
      <tr bgcolor="#800000">
      <td height="151" colspan="2"><table width="100%">
      <tr>
      <td width="50%" align="center" bgcolor="#800000"><input name="usericon" type="radio" value="11" checked>
      <img src="images/6.gif" width="24" height="24"></td>
      <td width="50%" align="center" bgcolor="#800000"><input name="usericon" type="radio" value="7">
      <img src="images/5.gif" width="24" height="24"></td>
      </tr>
      <tr>
      <td align="center" bgcolor="#800000"><img src="images/bay.gif" width="70" height="20"></td>
      <td align="center" bgcolor="#800000"><img src="images/bayan.gif" width="70" height="20"></td>
      </tr>
      <tr bgcolor="#800000">
      <td colspan="2" align="center"><input name="submit" type="submit" value="Giriş"></td>
      </tr>
      </table>

      <img src="images/alt.gif" width="350" height="30">

      </td>
      </tr>
      </table></td>
      </tr>
      </tbody>
      </table>
      </form>
      <div align="center">
      <script language="javascript">
      document.getElementById('edUsername').focus();
      </script>
      </div>
      </SCRIPT>
      <SCRIPT language=JavaScript>curPage=1;
      document.oncontextmenu = function(){return false}
      if(document.layers) {
      window.captureEvents(Event.MOUSEDOWN);
      window.onmousedown = function(e){
      if(e.target==document)return false;
      }
      }
      else {
      document.onmousedown = function(){return false}
      }</SCRIPT>
      </body>
      </HTML>
      • Zend Studio 3.0
        2006-09-22 09:45:16  Bahoz [Reply | View]

        Lora
  • Some errors I think
    2003-10-24 11:40:22  anonymous2 [Reply | View]

    I've been using Studio 3.0 at work for a few weeks now and I can only day that I am very glad I ripped myself away from using vim to write PHP. Zend Studio has not really improved the speed of development, but my team is much happier about doing it :)
    In reference to a couple of comments in the review - you can split the code view, right click on the source, it's in the menu.
    The other thing is that you actually can de-dock some of the bits of the UI, but it isn't very pleasant ;)
    • Some errors I think
      2003-10-24 12:05:56  anonymous2 [Reply | View]

      Cool, never could get it to split the windows before. Just tried it on a piece I am working on. Just right-click and close the file to close the 2nd view/window.


Tagged Articles

Be the first to post this article to del.icio.us

Sponsored Resources

  • Inside Lightroom
Advertisement

Sponsored by:

O'Reilly Media

©2009, O'Reilly Media, Inc.
(707) 827-7000 / (800) 998-9938
All trademarks and registered trademarks appearing on oreilly.com are the property of their respective owners.
About O'Reilly
Academic Solutions
Authors
Contacts
Customer Service
Jobs
Newsletters
O'Reilly Labs
Press Room
Privacy Policy
RSS Feeds
Terms of Service
User Groups
Writing for O'Reilly
Content Archive
Business Technology
Computer Technology
Google
Microsoft
Mobile
Network
Operating System
Digital Photography
Programming
Software
Web
Web Design
More O'Reilly Sites
O'Reilly Radar
Ignite
Tools of Change for Publishing
Digital Media
Inside iPhone
O'Reilly FYI
makezine.com
craftzine.com
hackszine.com
perl.com
xml.com

Partner Sites
InsideRIA
java.net
O'Reilly Insights on Forbes.com