This updates php-mode with features to make it more friendly to use with PHP 5.4 and 5.5. It is based on the work of:
-
Turadg Aleahmad: The original author.
-
Aaron S. Hawley
-
Lennart Borgman
And all those mentioned in the ‘Contributors’ section below.
Please email any bugs or feature requests to lobbyjones at gmail dot com
or submit them as Issues on the Github page. Also please include the output of php-mode-version
in bug reports.
Note: You can see all of the previous changes for each version here.
The php-mode wiki describes the plan for the next release and I update it to mark off issues when they are complete. However, there is no hard date set for each release. Serious bugs I try to resolve as soon as possibe. But lately I have been lax when it comes to finishing feature requests, so my apologies. That said, php-mode is in no way a dead project by any means, even if updates are sometimes sparse.
Now php-mode supports syntax highlighting for new keywords which were added as part of PHP 5.4, e.g. those related to traits, such as insteadof
. Also supported are the older keywords clone
and default
.
Syntax highlighting includes every magic constant and predefined constant listed on the official PHP site. However, some constants from specific extensions are not currently included.
Traits, interfaces, and namespaces now appear under Imenu listings. Fontification works properly for namespaces as well, so that code like namespace Foo\Bar\Baz
no longer looks like a warning. This is also true for namespace aliases, e.g. use <namespace> as <alias>
; currently the aliased name is not listed in Imenu, but that will be addressed in the future.
Underscores are treated as ‘symbol constituents’ (in Emacs terminology) so that you can use keys like M-f and M-b to move through the individual parts of a variable name like $foo_bar_baz
.
A series of method calls over multiple lines will now be aligned with the ->
operator, e.g.:
$object->foo()
->bar()
->baz();
Nested function calls and array()
structures now look better by default (or at least in my opinion). Here is an example of the style:
$results = Post::model()->find(
array(
'select' => 'title',
'condition' => 'postID=:postID',
'params' => array(':postID' => 10),
)
);
Anonymous functions such as
$greet = function($name) { … };
will now appear on Imenu; in this case the name will be $greet
.
By customizing the variable php-executable
you can enable Flymake mode in order to see warnings and errors in real-time as you write code.
The key command C-c C-f
will search the PHP website for documentation on the word under the cursor. However, if you have a local copy of the PHP documentation then php-mode will try searching that documentation first. All you need to do is customize the variable php-manual-path
and give it the path to your copy of the documentation. If php-mode cannot find something locally then it will still fallback on searching the PHP website.
The command php-send-region
, which is bound to C-c C-r
by default, will execute the selected region of PHP code. In conjunction with the Emacs command C-x h
you can use this to execute an entire file. Any output will appear in a buffer called *PHP*
.
Projects like Symfony use annotations in comments. For example, here is code from their website:
/**
* @ORM\Entity
* @ORM\Table(name="product")
*/
class Product
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string", length=100)
*/
protected $name;
/**
* @ORM\Column(type="decimal", scale=2)
*/
protected $price;
/**
* @ORM\Column(type="text")
*/
protected $description;
}
The annotations are the lines that begin with the @
character, and php-mode will give these special highlighting to help them stand out.
By default php-mode tries to provide a reasonable style for indentation and formatting. However, it provides other options suited for particular projects which you may find useful. These coding styles are available through three functions:
php-enable-pear-coding-style
php-enable-drupal-coding-style
php-enable-wordpress-coding-style
They will help format your code for PEAR projects, or work on the Drupal and WordPress software, respectively. You may enable any of them by default by running M-x customize-group <RET> php
and looking for the ‘PHP Mode Coding Style’ option.
All contributions to php-mode are welcome. But please try to do the following when sending improvements or bug fixes:
-
Add your name to the list of ‘Contributors’ in this
README.md
file if it is not there already. If you have a Github page then please link your name to it, so people can see your other work. -
If your contribution addresses an issue on the Github project page then include a single line like
Github-issue: 16
with the appropriate issue number. -
Make sure to update the constant
php-mode-modified
. -
However, please do not modify
php-mode-version-number
. I will decide what constitutes a bump in the version number. -
Open the
php-mode-test.el
file and run all of the tests to ensure they still pass as expected. Sometimes we expect for a test to fail, and those unit tests have the appropriate configuration so their failure will not raise any warnings. You can use therun-tests.sh
script to run all tests from a terminal, which is also useful in conjunction withgit bisect run
. -
Send me a pull request here on Github. Or if you do not have a Github account then email the patches to me at
lobbyjones at gmail dot com
. Please try to make sure the patches are acceptable input to the comandgit am
. Please note that even if you send a pull request it is very likely that I will not simply merge your branch through Github; I prefer to go through commits and cherry-pick them so I can review the commit messages and sign-off on them. You can see which commits I did or did not merge by using thegit-cherry
command.
If you are fixing a bug related to a Github issue, then first of all, thank you for the help improving php-mode. Second, there is a tests/
directory which contains PHP scripts for issues (although not all of them). Please consider adding a test script to that directory that documents the expected behavior and provides code that allows others to see if said behavior works properly. Then create a unit test within php-mode-test.el
using ERT. Please try to follow the format of the existing tests.
The Github project page has a wiki that you should feel free to edit. The wiki lists the features and bugs that are on plan to include in upcoming versions of php-mode. It is also a place to add any tips to make the mode more useful.
The code for php-mode is covered by the GNU General Public License 3.
In chronological order:
- Juanjo
- Torsten Martinsen
- Vinai Kopp
- Sean Champ
- Doug Marcey
- Kevin Blake
- Rex McMaster
- Mathias Meyer
- Boris Folgmann
- Roland
- Rosenfeld
- Fred Yankowski
- Craig Andrews
- John Keller
- Ryan
- Sammartino
- ppercot
- Valentin Funk
- Stig Bakken
- Gregory Stark
- Chris Morris
- Nils Rennebarth
- Gerrit Riessen
- Eric Mc Sween
- Ville Skytta
- Giacomo Tesio
- Lennart Borgman
- Stefan Monnier
- Aaron S. Hawley
- Ian Eure
- Bill Lovett
- Dias Badekas
- David House
- Tom Willemsen
- Olaf the Viking
- Maël Nison
- flack
- Michele Bini
- Emanuele Tomasi
- David Maus
- Jakub Jankiewicz
- Marcin Antczak
- 顾伟刚
- zapad
- Carl Groner
- Michael Dwyer
- Daniel Hackney
- Nate Eagleson