【簡単習得】プログラミング言語PHP超基本文法

こんにちは。

プログラミングをしてみたいけど、何から初めて良いか分からない。WordPressは使ってるんだけど、プログラムレベルでカスタマイズしてみたい。MAMP・XAMPPをダウンロードしたけど、どうやってプログラムを書くのか。

この記事では、PHPの基礎の基礎の部分をご紹介します!サンプルと解説を用意しているので、ぜひ読みながら実践してみてください!

(環境: Mac OS X El Capitan バージョン10.11.2, PHP 5.6.10 を使用しています。)

PHP 基本編

PHPブロック

sample ) helloworld.php

<?php
    echo 'Hello World!';
?>

ここに、PHPのサンプルプログラムがあります。

このPHPプログラムの「 <?php 」がPHPブロックの開始タグと呼び、「 ?> 」の部分を閉じタグと呼びます。

これらの開始タグ「 <?php 」と 閉じタグ 「 ?> 」に挟まれた部分を、「PHPブロック」と呼び、このブロック内に記述されたものがPHPのプログラムとして実行されます。
ここのサンプルだと、「 echo ‘Hello World!’; 」の部分がPHPプログラムとして実行されることになります。

sample ) endtag.php

<?php
   echo 'PHPの閉じタグは省略可能です';

実は、PHPのタグは省略することもできます。

サンプルプログラムのように、「PHPのみ記述されているファイル」については、閉じタグを記述しないように推奨されていたりします。しかし、PHPプログラムの後にHTMLなどを記述する場合は、「閉じタグ」を記述しなければエラーとなります。

コメント

sample ) comment.php

<?php
    // echo 'この行は出力されません (一行コメント)';
   # echo 'この行は出力されません (一行コメント)';

  /*
    echo 'この行も';
    echo 'この行も';
    echo 'この行も出力されません (ブロックコメント)';
  */

  echo 'この行は出力されます。';

PHPのプログラムファイルにどのような処理なのか、記述したりすることがあります。そんなときに使うのが「 コメント 」です。

コメントには一行コメントとブロックコメントがあります。「 // 」と「 # 」は一行コメントに使われ、これらの記号のあとにプログラムを記述しても、実行されません。

ブロックコメントは、複数行にわたってコメントを記述する際に使用します。

変数

sample) variable.php

<?php
   $num  = 7;
   $NUM  = 10;
   $str  = 'これは文字列です。';
   $bool = true;
   $_var = 'string';
   $var_var = 'variable';

このサンプルコードは変数を宣言しています。

変数はよく「箱」に例えられたりします。このサンプルで例えると、$numという名前の箱に、整数の7という値を一時的に記録しています。これが変数です。

変数の命名にはルールがあります。

まず、必ず「 $(ドル記号) 」を先頭につけます。その後に、変数の名前を続けます。変数名は必ず、文字か「_(アンダースコア)」から始まり、文字・数字・アンダースコアを続けることができます。変数名の大文字と小文字は区別されます。

例えば、「 $num 」と 「 $NUM 」は違う変数と認識されます。

※使用可能な文字列: a-z、A-Z、127から255まで (0x7f-0xff)のバイト

変数命名ルール まとめ

  • 「 $(ドルマーク) 」に続けて変数名付ける
  • 変数名は文字、または「 _(アンダースコア) 」で始める
  • 変数名として、「 a-z、A-Z、127から255まで (0x7f-0xff)のバイト、0-9、_(アンダースコア) 」が利用できる
  • 大文字と小文字は区別される

引用: PHP公式リファレンス

※ 2016/03/16 変数の説明について修正しました。
@rana_kualu さんより、変数の命名規則についてqiitaの投稿で間違いを指摘して頂きました。
ありがとうございます。

定数

sample ) constant.php

<?php
    define('FIRST_NAME', 'my first name');
    const LAST_NAME = 'my last name';

    echo FIRST_NAME;
    echo LAST_NAME;

このサンプルコードは定数を宣言しています。

定数は、先ほど説明した変数と違い、一度定義した定数の値は変更することができません。このような性質があるため、定数には使い回したい値を定義したりします。

定数を宣言する方法は、2つあります。
一つは「 define(‘定数名’, ‘定数の値’) 」、もう一つは「 define(‘定数名’, ‘定数の値’) 」です。

定数の命名ルールは、基本的には変数の命名ルールと同じですが、慣習として、定数名はすべて大文字で宣言します。

演算子

sample ) operator.php

<?php
  echo 1 + 1; // 加算
  echo 6 - 3; // 減算
  echo 3 * 4; // 積
  echo 12 / 2; // 商
  echo 13 % 2; // 剰余

ここでは演算子について紹介します。皆様は学校で数学を勉強をされたかと思うので、加算・減算・積・商についてに説明は省きます。

剰余についてですが、これは、ある数を割ったあまりを返します。サンプルコードだと、あまりは「 1 」なので、結果「 1 」を出力します。

sample ) operator_plus.php

<?php
    /**
     * $num_1 = $num_1 + 1 と同じ
     * 結果: 101
     */
    $num_1 = 100;
    echo $num_1 += 1;

    /**
     * $num_2 = $num_2 - 1 と同じ
     * 結果: 99
     */
    $num_2 = 100;
    echo $num_2 -= 1;

    /**
     * $num_3 = $num_3 * 2 と同じ
     * 結果: 200
     */
    $num_3 = 100;
    echo $num_3 *= 2;

    /**
     * $num_4 = $num_4 / 2 と同じ
     * 結果: 50
     */
    $num_4 = 100;
    echo $num_4 /= 2;

    /**
     * $num_5 = $num_5 % 3 と同じ
     * 結果: 1
     */
    $num_5 = 100;
    echo $num_5 %= 3;

先ほどご紹介した演算子はこのサンプルコードのように使うことも可能です。

sample ) incre_decre.php

<?php
    $num = 100;

    echo $num++; // 100
    echo $num; // 101
    echo ++$num; // 102
    echo $num; // 102
    echo $num--; // 102
    echo $num; // 101
    echo --$num; // 100
    echo $num; // 100

この「 ++ (インクリメント)」と「 — (デクリメント)」は、最初は難しく感じてしまうかもしれません。「 ++ 」と「 — 」は、ある変数に1を加える、1を引くという動作をします。簡単そうですが、変数の前に書くか、後ろに書くだけで、返す値が変わってくるので気をつけてください。

このサンプルコードで説明すると、変数の後ろに「 ++ 」を付けた場合、100を返してから、変数に1を加えます。結果、表示されるのは「 100 」なのですが、変数の値は「 101 」になっています。そして、次の出力でその結果が出力されているということです。デクリメントも同じように考えていただければ構いません。

他にも、さまざまな演算子があり、連結演算子や比較演算子、論理演算子などがあります。

sample ) operator_2.php

<?php
/**
 * 連結演算子
 *
 * 文字列を連結するには .(ドット)を使います
 */
    // 出力結果: Yamada Hanako
    echo "Yamada " . "Hanako";

/**
 * 比較演算子
 *
 * 「 == 」 等しい
 * 「 === 」等しい(厳密)
 * 「 != 」 異なる
 * 「 !== 」異なる(厳密)
 * 「 <> 」 異なる(!= と同じ)
 * 「 > 」  大きい
 * 「 >= 」 以上
 * 「 < 」  小さい
 *  「 <= 」以下
 */

var_dump(1 == 1); // true
var_dump(1 === "1"); // false
var_dump(1 != 2); // true
var_dump(1 !== "1"); // true
var_dump(1 <> 2); // true
var_dump(10 > 10); // false
var_dump(10 >= 10); // true
var_dump(1 < 5); // true
var_dump(5 <= 5); // true

/**
 * 論理演算子
 *
 * && ~ かつ ~(and)
 * || ~ または ~ (or)
 * !  ~でない
 *
 */

$a = true;
$b = true;
var_dump($a && $b); // true
var_dump($a || $b); // true

$a = true;
$b = false;
var_dump($a && $b); // false
var_dump($a || $b); // true

$a = false;
$b = false;
var_dump($a && $b); // false
var_dump($a || $b); // false

$a = false;
$b = true;
var_dump(!($a && $b)); // true
var_dump(!($a || $b)); // false

配列

sample ) array.php

<?php
    // これも可能: $campanies = ['apple', 'microsoft', 'facebook'];
    $campanies = array('apple', 'microsoft', 'facebook');

    echo $campanies[0]; // apple
    echo $campanies[1]; // microsoft
    echo $campanies[2]; // facebook

配列は、複数の値を管理することができます。
配列を利用するには、array() で値を定義をします。このサンプルコードでは、会社名を配列でまとめています。

これらの要素にアクセスするのは簡単です。変数にブラケット([ ])をつけて、その中に数字を指定するとアクセスすることができます。

このブラケットの中に指定する数字を、「 添字 」といいます。ここで注意が必要で、添字は「 0 」から始まるということです。

連想配列

sample ) associative_array.php

<?php
    $juice = array(
        'orange' => 'orange juice',
        'apple'  => 'apple juice',
        'grape'  => 'grape juice',
        'banana' => 'banana juice'
    );

    echo $juice['orange'];
    echo $juice['apple'];
    echo $juice['grape'];
    echo $juice['banana'];

連想配列は、先ほど紹介した配列と似ています。

配列では、添字を指定して要素にアクセスをしていました。連想配列では、この添字の代わりに、自分で要素に名前を付けて、その名前を使い要素にアクセスすることができます。

この要素にアクセスするための名前を「 キー 」 と呼びます。

サンプルコードでは、キーには果物の名前。要素には、果物のジュースの名前を定義した連想配列となっています。

if – elseif – else

sample ) if.php

<?php
/**
 * if (条件) {
 *     条件が真の場合に実行されます
 * } else {
 *     条件式が偽の場合に実行されます
 * }
 *
 */

    // パターン1
    $is_human = true;
    if ($is_human) {
        echo 'あなたは人間です';
    }

    // パターン2
    $is_fruit = false;
    if ($is_fruit) {
        echo 'これは果物です';
    } else {
        echo 'これは果物ではありません';
    }

    // パターン3
    $fruit = 'mikan';
    if ($fruit === 'banana') {
        echo 'バナナです';
    } elseif ($fruit === 'apple') {
        echo 'りんごです';
    } elseif ($fruit === 'mikan') {
        echo 'みかんです';
    } else {
        echo 'なにか';
    }

ここでは、「 if 」について解説します。

「if 」は制御を行う構文の一つです。条件式が真の時・偽の時など、条件を書くことで、プログラムを制御することが可能です。

サンプルコードにもあるように、「 if 」 や 「 if – else 」、「 if – elseif – else 」 を使い分けることによって、条件を分岐させたりすることも可能です。

while

sample ) while.php

<?php
/**
 * while (条件式) {
 *     条件式が真である場合、
 *     この { } に囲われた処理が繰り返し実行されます。
 * }
 */

    $count = 0;

    while ($count <= 100) {
        echo $count;
        $count++;
    }

「while」は、制御構文の一つで、条件式が真の場合に、{ } 内に書かれた処理が繰り返し実行され続けます。

サンプルコードは、「 while 」を使って、1 から 100までを出力するプログラムになっています。繰り返し処理を行いたい場合に利用します。

「 while 」と一緒によく使われる構文があります。
それが、「 break 」と「 continue 」です。

ループ処理から抜けたい、強制的に終了したい場合は、「 break 」を使います。
また、条件判定が真の場合には、処理をスキップしたい場合は、「 continue 」を使います。

sample ) break_continue.php

<?php
    $count = 1;
    while($count <= 100) {
        if ($count === 9) {
            break;
        }

        if ($count % 3 === 0) {
            $count++;
            continue;
        }

        echo $count . "\n";
        $count++;
    }

このサンプルコードは、1 ~ 100まで出力するプログラムです。

しかし、3の倍数の時は数を「 continue 」を使い、処理をスキップするので数を出力せず、変数$countが9になると「 break 」でループ処理を強制的に止めています。なので、出力されるのは8までとなります。

for

sample ) for.php

<?php
/**
 * for (初期化式; 条件式; 反復式) {
 *     処理
 * }
 *
 */

    $fruits = array(
        'orange', 'melon', 'grape', 'banana', 'strawberry'
    );

    for ($i = 0; $i < 5; $i++) {
        echo $fruits[$i];
    }

「 for 」は、反復処理を行うのに便利な構文です。

「 for 」には、「 初期化式・条件式・反復式 」があり、難しく感じるかもしれませんが大丈夫です。

動作の流れは以下の通りです。

①初期化式を実行する
②次に、条件式を見て、真であれば、{ }に囲われた処理を実行します。
偽であれば、処理を実行せず、「 for 」の動作は終了です。
③中の処理を実行し、反復式を実行します。
④再び②に戻り、真であれば処理を実行。偽であれば終了。

これらは、「 for 」の動作が終わるまで繰り返されます。

サンプルコードでは、「 for 」を利用して配列の要素を出力しています。

①まず、初期化式を実行するので、変数$i に「 0 」が代入されます。
②そのあと、条件式を見て、変数$i は「 5 」よりも小さいので、条件式は真となります。
③添字として変数$i を使っているので、添字が「 [0] 」の要素が出力されます。(ここであれば、orange)
そして、反復式が実行され、変数$i に「 1 」が加えられます。
④再び②と同じ動作を実行します。

回数を指定して反復処理を実行する場合に便利な構文です。

foreach

sample ) foreach.php

<?php
/**
 * foreach (配列 or オブジェクト as 要素) {
 *     処理
 * }
 *
 */

    $fruits = array(
        'orange', 'melon', 'grape', 'banana', 'strawberry'
    );

    foreach ($fruits as $fruit) {
        echo $fruit;
    }

/**
 * foreach (配列 or オブジェクト as キー => 要素) {
 *     処理
 * }
 *
 */

    $fruits_juice = array(
        'orange' => 'orange juice',
        'melon'  => 'melon juice',
        'grape'  => 'grape juice',
        'banana' => 'banana juice',
        'strawberry' => 'strawberry juice'
    );

    foreach ($fruits_juice as $fruit => $juice) {
        echo $fruit . "(果物) => " . $juice . "(ジュース)<br>";
    }

「 foreach 」は配列やオブジェクトを反復処理するのに便利な構文です。

先ほど紹介した「 for 」と違い、反復する回数などは指定しません。配列の先頭から最後に至るまで、処理を実行します。この時、配列の要素一つ一つに処理が実行されます。

サンプルコードでは、「 foreach 」の二種類のパターンを紹介しています。

一つは、配列から要素のみを取り出し、処理を実行しています。もう一つは、連想配列から「キー」と「要素」を抜き出し処理を行っています。

関数

関数とは、何でしょうか。関数を使わなくとも、「 if 」などの制御構造を使うだけで処理を書くことができます。しかし、処理が増えてくると、見通しも悪くなり、複雑になってしまいます。そこで、関数を使います。

何らかの処理を一つにまとめて関数として書き出すことで、見通しも良くなります。書き出した関数は、他の処理でも使い回すこともでき、同じようなコードを何度も何度も書かないで済むようになります。

実は、PHPにはあらかじめ便利な関数がたくさん組み込まれています。そういった関数のことを「ビルトイン関数」といいます。

ここでサンプルコードを紹介します。

sample ) function.php

<?php
/**
 * ・関数を自分で定義する場合
 *
 * function 関数名 (パラメータ1, パラメータ2) {
 *     {}内に処理を書きます。
 *
 *     何か値を返す(戻り値)場合は「 return 」を使います
 *     return 戻り値;
 * }
 *
 * ・定義した関数を利用する場合
 *
 * 関数名(引数1, 引数2);
 *
 */

/**
 * Hello Worldと出力する関数
 */
function helloWorld() {
    echo 'Hello World';
}
helloWorld();

/**
 * 引数に数値を与えてあげると
 * 引数に与えた値を2倍にした値を返す関数
 */
function getDoubleNum($num) {
    return $num * 2;
}

/**
 * count()は要素の数を返すビルトイン関数
 */
    $fruits = array('apple', 'banana', 'lemon');
    // この例では、3を返します。
    echo count($fruits);

関数の定義方法はコメントを読んでいただければと思います。

補足として、関数定義の際に、パラメータを用意した場合、必ず値を渡してあげないとエラーになるので注意してください。

sample ) function_2.php

<?php
    $fruits = 'apple banana orange';

    /**
     * 変数$fruitsに、「 orange 」という文字列が
     * 含まれているかを確かめる
     *
     * 注意: 文字列の開始位置は「 0 」から
     */

    // 13と値が返ってくるので、
    // 13文字目にorangeの最初の文字が見つかったことを表す
    echo strpos($fruits, 'orange');

    /**
     * 変数$fruitsから、文字列である「 banana 」を抜き取る
     */
    echo substr($fruits, 6, 6);


    $pizza  = "piece1,piece2,piece3,piece4,piece5,piece6";

    /**
     * ,(カンマ)で区切られた文字列を
     * カンマごとに区切って配列にして返します
     *
     * 第1引数に、区切り文字を指定します。ここでは「 , 」
     * 第2引数に、文字列を指定します。
     */
    $piecePizza = explode(',', $pizza);
    var_dump($piecePizza);

まだまだビルトイン関数はあるので、試しに調べて遊んでみてください。

PHP 実践編

ここでは、ここまで学んだことを使って、プログラムを作ってみましょう。
まず、fizzbuzzプログラムを作ります。

前提条件は以下の通りです。
①1 ~ 100 までを出力する
②3の倍数の時は「 fizz 」と出力する
③5の倍数の時は「 buzz 」と出力する
④3の倍数であり、5の倍数でもある時は、「 fizzbuzz 」と出力する

まず、自分で考えてやってみましょう!

sample ) fizzbuzz.php

<?php
    for ($i = 1; $i <= 100; $i++) {
        if ( $i % 3 === 0 && $i % 5 === 0 ) {
            echo "fizzbuzz\n";
            continue;
        }

        if ( $i % 5 === 0 ) {
            echo "buzz\n";
            continue;
        }

        if ( $i % 3 === 0) {
            echo "fizz\n";
            continue;
        }

        echo $i . "\n";
    }

三角形・四角形・台形の面積を求める関数を定義して、
面積を求めてみましょう。

sample ) area.php

<?php
/**
 * 四角形の面積を求める関数
 * $base   => 底辺
 * $height => 高さ
 */
    function getSquareArea($base = 1, $height = 1) {
        return $base * $height;
    }

/**
 * 三角形の面積を求める関数
 * $base   => 底辺
 * $height => 高さ
 */
    function getTriangleArea($base = 1, $height = 1) {
        return $base * $height / 2;
    }

/**
 * 台形の面積を求める関数
 * $upperBase => 上底
 * $lowerBase => 下底
 * $height    => 高さ
 */
    function getTrapezoidArea($upperBase = 1, $lowerBase = 1, $height = 1) {
        return ($upperBase + $lowerBase) * $height / 2;
    }

    echo getSquareArea(4, 5) . "\n"; // 20
    echo getTriangleArea(6, 8) . "\n"; // 24
    echo getTrapezoidArea(2, 3, 4); // 10

最後は、少し難しいかも!
階乗を計算するプログラムを作ってみましょう!
例)5の階乗の場合、5 * 4 * 3 * 2 * 1 = 120となります。
sample ) factorial.php

 
<?php
    function getFactorial($num) {
        if ($num === 1) {
            return $num;
        }

        return $num * getFactorial($num -1);
    }

    echo getFactorial(5);
 

定義した関数の中から自身の関数を呼び出すことも可能です。この関数のことを、「再帰関数」と呼びます。少し複雑に感じるかもしれませんが、慣れれば階乗計算のようなこともできるのでマスターしてみてはいかがでしょうか。

最後に

いかがでしたでしょうか。

今回は超基本と題した記事だったので、簡単に基礎的な構文などをサンプルコードと一緒にご紹介してきました。ただ、ご紹介できていない概念だったり構文などはまだまだあります。

これを機にもっと知りたい・学びたいと思った読者の方がいらっしゃれば、たくさんのエンジニアの方が記事を公開していますので、そこから学ぶも良し。PHPの基礎本はたくさん売られているので書店に行くのも良いと思います。興味に勝るものはありませんから!