WordPress development with PHPStorm

For years, I used the NetBeans for all my WordPress related development, but due to the various issues, I gave up on NetBeans earlier this year. Since March I have been using PHPStorm, and after a few months, I can say that PHPStorm will remain my main IDE for PHP/WordPress development for the foreseeable future.

PHPStorm is developed by the JetBrains and it is one among many different IDE’s and development tools they make for various programming languages and work on all major platforms (Windows, Linux and macOS).

PHPStorm IDE with open project

Working with projects

One of the basic features that IDE needs to be done well is the handling of projects. PHPStorm can be opened in multiple instances, each one running different project. For the most part, projects don’t share settings, and you can set up each project differently, and that includes the build process for SCSS or JavaScript, the layout of the environment, version control and everything else.

For me, this was a bit confusing at first, because, right now I have 10 projects created with PHPStorm, covering different types of websites made for the development of various plugins, and sharing settings would make sense for many of the projects. But, most settings can be exported and imported back to make things easier, and some settings can be global (that too can be confusing, especially since some global settings were not working for me in some cases).

For my particular development setups (some websites are working under XAMPP, some under Local by Flywheel), PHPStorm has been handling projects exceptionally well so far, and with recent 2019.2 update, that has been improved a lot with better WordPress support.

It has full Git (and other versioning systems) support, and you can do anything Git related directly from the plugin interface. I still use TortoiseGit, but PHPStorm has been really great with the Git support right in the IDE.

WordPress Support

WordPress development can be tricky, considering that a lot of things depend on the filters and actions, and PHPStorm handles that very well (for the most part). Setting the project as WordPress project will ensure that PHPStorm caches WordPress functions and classes, it can even adjust coding code style and other things too.

Support for actions and filters are very good, but some things are not obvious when you start using it. When you start typing add_action or add_filter, PHPStorm will provide autocomplete for the action/filter names. And, the line with add_action or add_filter will include invocation location arrow to quickly bring you to the place that hook is run. Resolving callbacks work fine for methods and functions.

Search for the action inside the selected directory

There are no Find Usages for filter/actions, and instead, you need to use Find dialogue. That is the only issue I have with that, and it is a minor issue, to begin with, everything else WordPress related has been great.

CSS/JS Build process

PHPStorm has own File Watcher system that can monitor changes in any file and perform actions based on the File Watcher rules. These can be simple rules, and they can be quite complicated based on the regular expressions to get the files.

File watcher transforming SCSS to CSS

File Watchers can be a pain to configure at first, but, the PHPStorm documentation and support were very helpful, and it works great now.

And, since I am not a big fan of having full Node.js build system that has complex build files and things like that, I really like the way PHPStorm handles that. It is all defined on the project level settings, and you don’t need any extra files inside your project for transforming SCSS to CSS, run minification or something else. You still need Node.js installed, but I really hate managing packages and all other nonsense Node brings, PHPStorm conveniently hides all that, and does things in the background with a much easier way to configure things.

Linting and hinting can be done using files, and PHPStorm detects those, and it can also have all these rules set in the project settings, and avoid having these extra files in projects too.

How much resources does it use?

PHPStorm creates cache files for each project and these files can take a lot of space (currently over 5GB of cache used for my projects), compared to NetBeans, it is a huge increase. But, because of such a large cache and the way it works with it, a lot of operations are almost instantaneous. I am yet to notice issues with scanning large projects, managing duplicated code and things like that. This cache makes PHPStorm very fast.

My current main development laptop is Lenovo Thinkpad L480 with i5 8250u CPU (4 cores and 8 threads) and 16GB dual-channel DDR4 RAM, with 256GB SSD.

Single project running in one PHPStorm instance can take 300MB to 800MB of RAM. If you run more instances, RAM usage rises, but not by match. With 5 big projects running at the same time (5 instances), RAM usage was around 2GB. In the same time, CPU usage is very low, and only if there is some background scan running, it can start using more CPU time.

Overall, PHPStorm is significantly faster than NetBeans, uses less resources, and for the last 5 months, I never needed to kill PHPStorm process due to the background scanner issues or anything else really.

And the price

Yes, PHPStorm is not free, it has a subscription-based license and you have to pay each month, or once a year. But, the price is fair for what PHPStorm brings to the table. In my case, it has made a lot of things easier, and even with the learning curve that any new software has, my productivity has increased by at least 30% since I have started using it.

They have quick release cycles, with 3 or 4 major updates each year, and each update so far has brought some really nice updates, including support for upcoming PHP 7.4.

Should you use it?

Well, I can recommend to everyone working with PHP and WordPress to try PHPStorm. it has 30 days trial that is fully functional, and that is plenty of time to assess the worth of PHPStorm. Even if you are satisfied with your current IDE, give PHPStorm a try.

Let me know what you think about PHPStorm if you have some interesting experiences with it, or suggestions on how to use it, some tips or even the issues you had with it.