:lang php

Perl’s insecure younger brother

1. Description

This module adds support for PHP 5.3+ (including PHP7).

  • ctags-based code completion (company-php and phpctags)
  • eldoc support (ac-php and php-extras)
  • REPL (php-boris)
  • Code refactoring commands (php-refactor-mode)
  • Unit-test commands (phpunit)
  • Support for laravel and composer projects (with project-specific snippets)
  • File templates
  • Snippets

PHP was the first programming language I got paid to code in, back in the Cretaceous period (2003). My sincerest apologies go out to all the programmers who inherited my earliest PHP work. I know you’re out there, writhing in your straitjackets.

Save a programmer today. Stop a friend from choosing PHP as their first language.

1.1. Maintainers

This module has no dedicated maintainers.

1.2. Module flags

+hack
Add support for the Hack dialect of PHP by Facebook.
+lsp
Enable LSP support through phpactor or intelephense. Requires :tools lsp module and the phpactor server to be installed on your system.

2. Prerequisites

2.1. PHP

To get started with PHP, you’ll need php (5.3+) and composer.

Note for +lsp:

  1. In order to make full use of phpactor server, php (7.3+) is recommended.
  2. If you use intelephense, node and npm are needed.

2.1.1. MacOS

PHP 5.5 comes prepackaged with newer versions of MacOS. These instructions are provided for reference:

$ brew tap homebrew/homebrew-php
$ brew install php71  # or php53, php54, php55
$ brew install composer

# If you use intelephense:
$ brew install node
$ brew install npm

2.1.2. Arch Linux

$ pacman --needed --noconfirm -S php composer  # or php53, php54, php55

# If you use intelephense:
$ pacman -S nodejs npm

2.1.3. openSUSE

$ zypper install php-composer

# If you use intelephense:
$ zypper install nodejs npm

2.2. Dependencies

This module has no required dependencies, but it has a couple optional ones.

  • boris (REPL)
  • phpctags (better code completion)
  • phpunit (unit test commands)
  • php-cs-fixer and @prettier/plugin-php (for code formatting)
$ composer global require \
      d11wtq/boris \
      phpunit/phpunit \
      techlivezheng/phpctags \
      friendsofphp/php-cs-fixer

# Needed by php-cs-fixer, otherwise you'll get "Couldn't resolve parser
# 'php'" errors
$ npm install -g @prettier/plugin-php

You must ensure that ~/.composer/vendor/bin is in PATH, so these executables are visible to Emacs:

# place this in your profile file, like ~/.bash_profile or ~/.zshenv
$ export PATH="~/.composer/vendor/bin:$PATH"

You may also need to regenerate your envvar file by running $ doom env on the command line.

To use intelephense instead of , run M-x lsp-install-server and choose iph to install lsp-intelephense.

3. TODO Usage

This module has no usage documentation yet. Write some?

4. TODO Configuration

This module has no configuration documentation yet. Write some?

5. TODO Troubleshooting

There are no known problems with this module. Report one?

6. TODO Appendix

This module has no appendix yet. Write one?