導入
仕事で PHP を書く機会が訪れたので書き残す.
できるだけ古い情報にはあたらず, 最近の PHP の情報を追ってみた.
他 LL 出身者のための, って題したけどとくに比較はしてない. あとはたのんだ.
インストール
開発環境は Mac を前提としている.
PHP 5.5 を Homebrew でインストールする.
PHP は 6 の開発が頓挫したらしく, それに盛り込まれる機能が 5.3 で入ったため, 5.2 以前と 5.3 以降ではメジャーバージョンレベルの差が存在するらしい.
brew tap homebrew/dupes
brew tap homebrew/versions
brew tap homebrew/homebrew-php
brew install php55
PATH を通す. .bashrc
に以下を書き加える
export PATH="$(brew --prefix homebrew/php/php55)/bin:$PATH"
叩く
source ~/.bashrc
バージョンを確認する
$ php -v
PHP 5.5.19 (cli) (built: Dec 2 2014 17:51:03)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
ライブラリ管理
PEAR (非推奨)
PHP のライブラリ管理ソフトの pear をアップデートしておく.
pear update-channels
pear upgrade -a PEAR
pear upgrade-all
ライブラリを探すのに, デフォルトでは pear.php.net
が登録されている. この捜索範囲を広げるには channel-discover
で配布サイトを登録するか, auto_discover
の自動捜索を on にするか, の 2 通りある. セキュリティ上の理由で後者はデフォルトでは off となっている. 問題が出るまでデフォルトのままにし, 見つからない場合は信用された配布サイトを登録するのが良いだろう.
PEAR 1.4.0 channels from the client side | Lot 49
ここでは PHP のユニットテストにおけるデファクトスタンダードである, PHPUnit を導入する.
sudo pear channel-discover pear.phpunit.de
pear install pear.phpunit.de/PHPUnit
として入れたら
$ phpunit
You have installed PHPUnit via PEAR. This installation method is no longer
supported and http://pear.phpunit.de/ will be shut down no later than
December, 31 2014.
Please read http://phpunit.de/manual/current/en/installation.html and
learn how to use PHPUnit from a PHAR or install it via Composer.
となったため, Pear を捨て Composer を使う (つらい).
Composer
現在では PHP のライブラリ管理には Composer が幅広く活用されている.
- Composerを活用したモダンな開発手法をPHPカンファレンス2013で発表してきた。 #phpcon2013 - Engine Yard Blog
- PHP - composer 導入をまじめに考える - Qiita
まずインストール (時間かかる)
curl -sS https://getcomposer.org/installer | php
php composer.phar install
composer.json
に以下を記述.
開発環境でしか使わないため, require-dev
に指定.
{
"require-dev": {
"phpunit/phpunit": "3.7.*"
}
}
もっかいインストール
php composer.phar install --dev
Hello World
以下を作り, test.php
という名前で保存する.
<?php echo 'Hello World!'
まず記法として PHP は先頭に <?php
を書き, 最終行に ?>
を書くもの, と思っている人も多いかもしれない (自分もそうだった). その常識?に反し, 後者の閉じ ?>
は必要ない. かえって以下のような問題が発生しうるので, 書かないという選択が賢明かもしれない.
PHPの閉じタグは心の臓に悪いから使わないで - Unknown::Programming
叩く
$ php test.php
Hello World!
規約
命名規則
- クラス名は StudlyCaps (UpperCamelCase)
- メソッド名は lowerCamelCase
- 定数は UPPER_SNAKE_CASE
- プロパティはプロダクトやフレームワークごとに定める
コーディング規約
PSR-2 を基本的に順守する.
- 名前空間を必ず使う
- インデントは半角スペース 4 つ
警告を出す
CodeSniffer を使う.
{
"require-dev": {
"phpunit/phpunit": "3.7.*",
"squizlabs/php_codesniffer": "1.*"
}
}
pear install PHP_CodeSniffer
ここで, 先ほどのファイルにあえて閉じタグをつける.
<?php
echo 'Hello World!';
?>
この状態で phpcs
(PHP CodeSniffer) を動かすと, 以下のようなエラーが出る.
$ phpcs --standard=Psr2 test.php
FILE: /Users/Miyabi/test.php
--------------------------------------------------------------------------------
FOUND 1 ERROR(S) AFFECTING 1 LINE(S)
--------------------------------------------------------------------------------
3 | ERROR | A closing tag is not permitted at the end of a PHP file
--------------------------------------------------------------------------------
修正すると, エラーは消える.
$ phpcs --standard=Psr2 test.php
クラス
FizzBuzz を作る. FizzBuzz.php
で保存.
<?php
class FizzBuzz
{
public function say($n)
{
if ($this->isFizzBuzz($n)) return 'FizzBuzz';
if ($this->isFizz($n)) return 'Fizz';
if ($this->isBuzz($n)) return 'Buzz';
}
private function isFizz($n)
{
return $n % 3 == 0;
}
private function isBuzz($n)
{
return $n % 5 == 0;
}
private function isFizzBuzz($n)
{
return $n % 15 == 0;
}
}
テスト
上の FizzBuzz のテストを書く. ファイル名は FizzBuzzTest.php
とする.
<?php
require_once 'FizzBuzz.php';
class FizzBuzzTest extends PHPUnit_Framework_TestCase
{
public function setUp()
{
$this->fizzbuzz = new FizzBuzz();
}
public function testSay()
{
$this->assertEquals('FizzBuzz', $this->fizzbuzz->say(15));
}
}
テストを走らせる
$ vendor/bin/phpunit FizzBuzzTest.php
PHPUnit 3.7.38 by Sebastian Bergmann.
.
Time: 106 ms, Memory: 2.25Mb
OK (1 test, 1 assertion)
感想戦
PHP を書くのは始めてだったのだけれど, わりと情報が多くて助かった. 最新の情報は Advent Calendar を追うのが良さそう.
なんかへんなことやってそうなので, コメントで指摘とかして頂けると大変うれしいです.