LoginSignup
9
11

More than 5 years have passed since last update.

他 LL 出身者のための PHP 入門前夜

Posted at

 2014-12-02 20.24.52.jpg

導入

仕事で 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

Homebrew/homebrew-php

ライブラリ管理

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

sebastianbergmann/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 が幅広く活用されている.

まずインストール (時間かかる)

curl -sS https://getcomposer.org/installer | php
php composer.phar install

Composer

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 を追うのが良さそう.
なんかへんなことやってそうなので, コメントで指摘とかして頂けると大変うれしいです.

References

9
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
11