Skip to content
Go to file

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


php+-mode README

**Note**: This package is no longer actively maintained. While it still has
some neat features, php-mode has had better support and updates for newer
versions of PHP. We have discussed getting php+-mode features into php-mode,
but nothing has come of this as of yet. Feel free to continue using php+-mode,
and if you find and fix any issues, don't hesitate to send pull requests.
Thanks, and I hope that php+-mode has been helpful.

php+-mode comes with pretty much everything neccesary to run it.  Emacs version 
23 or later is recommended.

Note that there is a known issue with company-mode version 0.5, or at least
with the version available from elpa.  See the INSTALL section for details.

For php-test, your system needs to have PHP installed on it for linting, and to
use any of the testing programs (phpunit, phpcs, phpmd), you need to have those
installed as well.

If you would like electric functionality (for instance, when you type ( the
matching ) is added for you, etc), you can use php-electric-mode, which at the
time of this writing can be found at


Ensure that all required modes and elisp files are on the load path and loaded.
Also ensure that php+-mode's elisp files are on the load path and loaded.  The
easiest way to obtain php+-mode is through package.el, which is included in
Emacs 24, but can be obtained for Emacs 23. Add the melpa repoitory to your
package repositores list (instructions can be found at  Otherwise, you can get php+-mode
straight from github at This is
recommended for anyone who wants to help develop php+-mode or contribute

Once you have donwloaded and installed php+-mode, put this in your .emacs file:

(require 'php+-mode)

Either execute these two lines of code, or restart emacs.

At this point, you should be ready to use php+-mode.  Just open up a php or
phtml file, and you should find yourself in php+-mode.  You should have a PHP+
menu and "php+" should be in the mode line.

To get an idea of what you can do with php+-mode, you can get a description and 
list of keybindings/functions for php+-mode by typing:
    C-h m
when inside of a php+-mode file.

If you have existing projects, or would like to add a new one, you can add them
to the php-project list by running:
    M-x php-project-add

If you are starting a new project, you can use create the directories and add 
the new project to your php-project-list all at once by running:
    M-x zf-create-directory-structure


There is a known issue with company-mode version 0.5.  If company mode isn't 
loading, or you get errors about pysmell or gtags, you need to remove the
gtags and pysmell backends from company-mode.  Cutomize the variable
`company-backends` and remove the lines for `company-pysmell` and 

While you're at it, you can also add a User-Defined company backend to the
merged backends section of company-backends called `company-my-php-backend`.
This backend will check the documentation for completions of php
keywords and such.


You can use the various "customize ..." options in the php+-mode menus to 
customize php+-mode.  Hopefully most of these customize options are 
self-explanatory.  For a full list of cutomize options, just browse through
each of the customize groups with `M-x customize-group`:
 - php-completion
 - php-doc
 - php-format
 - php-parse
 - php-project
 - php-tags
 - php-test
 - php+-mode


You may need to tell emacs where various executables are.  For instance, if 
php, phpunit, or phpcs (if you use the latter two) are not on your operating 
system's execute path, you may need to customize the following variables to 
tell them explicitly where the executables are:



To add a project to the projects list the easy way, run:
    M-x php-project-add
Alternatively, you can add projects manually by going to 
    PHP+ -> Project -> Customize Projects 
in the menu or by typing
    M-x customize-variable php-project-list

If you use customize, the main variable to setup here is the PHP Project List.
This is a list of directories on your computer that correspons with a set of
php files or project.

To setup a project, insert a new item in the list and fill in the fields:

Project Nickname - This is just a nickname for the project.
Project Directory - This is the base directory for the project.  For projects
    using the Zend Framework, this will typically be the directory where 
    application, library, etc, are.
Project TAGS File - This is the TAGS file for the project.
Extra TAGS Directories - A list of directories to include when generating the 
    project TAGS file.  You may want to put the Zend Framework directories here.
    Project directory is included by default.
PHPUnit Config File - This is the xml configuration file that phpunit will use
    when phpunit is run from php+-mode.
phpcs/phpmd Subdirectories - This is a list of directories which should be
    included when phpcs is run for the project directory.  
phpdoc overrides - these are project specific phpdoc information to include in
    doc blocks.  Project agnostic defaults can be set by customizing php-doc.
Zend Framework Global Namespace - This is the namespace of files generated 
    outside of modules (in the "main area" so to speak).  Traditionally, this 
    was "Default" but has recently more likely to be "Application".  This will 
    result in, for instance, models outside of modules being named 
    Default_Model_<name> or Application_Model_<name>.  (Only necessary for 
    projects using Zend Framework).
Zend Framework Default Module - This is the default module that will be used as
    default if the Zend project makes use of a default module in the modules
    directory instead of keeping default controllers, models, etc, inside the
    applications directory (not in modules).  (Only necessary for projects 
    using Zend Framework).


Tags files are basically compiled files of symbols that link various files
together, allowing you, for instance, to find the definition of a function by
"following" its name in a call somewhere else in your code.  This is done in 
emacs using the find-tag function, bound to M-. by default.

In order to use tags, you have to do two things:

1.) Create a tags file
2.) Load the tags file

The php-tags portion of php+-mode eases this process.  It requires you to have 
exhuberant-ctags installed.  This is different from ctags.  Basically, in my
experience, if your ctags does not have a -e flag, you need to get 
exhuberant-ctags to use.  There is a customizable variable 
php-tag-shell-command where you can set the path to your ctags command if 

To create a tags file you can either go to
    PHP+ -> Tags -> Create tags file
in the menu, or run
    M-x php-create-tag-file

A tags file will be created in the location given in the php-project-list 
settings for the current project.  After the tags file is generated, you will 
be prompted to load the newly created tags file.

Once the tags files is created, php-project will automatically load it whenever
you switch to a file or buffer that resides inside that project's directory.


php+-mode is written and maintained by Brian Zwahr <> and 
Mike Dwyer <>.


A better php mode for emacs, with specific support for Zend Framework 1.




No releases published


No packages published
You can’t perform that action at this time.