You are not a professional PHP/web developer if you’re not using…

I think all modern PHP developers need to familiarize themselves with Composer, git, grunt, and TDD (test-driven development). Also start using PHP’s internal web server. Once you’ve added a new feature or squashed a new bug, then commit to git. Use CI to always run tests before deploying to various environments. All unit and functional tests should pass prior to any deployment. Acceptance test probably isn’t needed for staging, but it is needed for production.

Here is a very brief breakdown of each of the things I listed.

Composer – dependency management. it’s used to automatically include shit that you wanna use in your app.

git – code management, version control, etc. Use this to track changes to code. The magic of git really shows when you’re collaborating and a single file is edited by multiple sources and git figures out how to merge all the changes.

grunt – calls itself a "task runner." in short, any repetitive work you find yourself doing should be built into a grunt task. Most stuff you’d have to do as a web developer already exists in a public repo somewhere and you can import it with npm. grunt can compile sass/less, minify javascript, images, svg, run build scripts, etc. anything you’d use a "watcher" for, you can/should integrate into grunt

TDD – test-driven development. This means that you’re building tests for each new feature that you add to your app. You should write your unit test first, then add your feature. Then add a functional test for broader scope feature tests. That is the proper way to do TDD. Acceptance tests are what bridge the gap between functional tests and what the client actually wants.

PHP’s internal web server – As of PHP v5.4, there is an internal web server. This means that you don’t need Apache/nginx to run PHP web apps. Just open up your command line and run and open localhost in your browser to test it and see for yourself. There are other options as well.

CI – continuous integration. This will run tests prior to deployment. In my case, I run gitlab and gitlab-ci both locally (in a VM) and remotely. Local code is vetted thoroughly before pushing to remote repo where it is tested again (in case there are slight differences in the code, i.e., a collaborator has updated something).

I think if you’re not doing that stuff, then you shouldn’t be getting paid to make websites since you’re not a professional web developer. You’re a hobbyist/amateur, and it’s unethical for you to charge anyone for your work.

This is how I do my internal PHP server.

So "" is my computer. I set my router’s domain to (mostly because using non-standard TLDs sometimes results in google searches if you forget the trailing slash). In other words, this lets me easily access my server from any device on the network, including my phone so I can do quick mobile testing. -t is used to set the document root, otherwise the current working directory will be used. The last line is the router, which you should be using. Just write yourself a small router. My wordpress router is 50 lines; my not-so-wordpress router is 15 lines. Basically, you just want to check if the file/folder exists; if it does, return false, otherwise process the request and/or send to index.php. It’s simple.