メインページ > 工学 > 情報技術 > プログラミング > PHP
__NOTOC__
PHPは、Web開発において非常に人気の高いプログラミング言語です。その理由は、PHPがシンプルで、簡単に学べること、Webアプリケーションの開発に特化していること、そして多くのオープンソースのフレームワークやライブラリが存在していることによるものです。
本書では、プログラミング初心者を対象に、PHPの基本的な概念や構文、そして関数やクラスの作り方などをわかりやすく説明します。また、実際に手を動かしてコードを書くことで、PHPの理解を深めることができます。
PHP 8は2022年12月現在、唯一サポートされているバージョンであり、最新の機能や安全性が確保されています。本書では、PHPの基礎から始めて、ウェブアプリケーション開発に必要な知識や技術を解説し、PHPを使った開発の初心者でも簡単に理解できるように構成されていますPHP7.4系列は、2022/11/28にEnd of lifeを迎えました。[https://www.php.net/eol.php Unsupported Branches][https://www.php.net/supported-versions.php Supported Versions](2022-12-02)。
PHPは、バージョンごとに多くの新機能が追加されています。以下に、PHP 7.0以降の主要な新機能をいくつか紹介します。
Null合体演算子: ??演算子は、左側の値がnullでない場合は左側の値を返し、そうでない場合は右側の値を返します。
スカラー型宣言: 関数の引数と戻り値に、スカラー型宣言（int、float、string、bool）を使用できるようになりました。
厳密なモード: 厳密なモードを有効にすることで、PHPは暗黙的な型変換を行わず、厳密な型チェックを行います。
匿名クラス: PHP 7から、匿名クラスを作成できるようになりました。これにより、一時的なオブジェクトを作成することができます。
Closure::call()メソッド: Closure::call()メソッドは、別のオブジェクトのコンテキストでクロージャを実行することができます。
Group use宣言: use宣言をグループ化して、複数の名前空間を一度にインポートできるようになりました。
Unicode codepointエスケープ構文: "\u{XXXX}"の形式で、Unicode codepointをエスケープすることができます。
多倍長整数サポート: GMPおよびBCMath関数のパフォーマンスが向上し、64ビットのプラットフォームで多倍長整数を使用できるようになりました。
Return type宣言: 関数の戻り値に、クラス、インターフェース、およびスカラー型を指定できるようになりました。
Generator return expressions: Generatorのreturn文で、値を返すことができるようになりました。
これらの機能は、PHPの新しいバージョンで利用可能ですが、サポートが継続しているバージョンでは全て利用可能です。
PHPには、他の一部のプログラミング言語にあるような明示的なジェネリックタイプがありません。ただし、PHPはジェネリックプログラミングのコンセプトを活用することができます。
たとえば、PHPの標準ライブラリには、異なるデータ型の値を扱うための多数の関数があります。これらの関数は、異なるデータ型に対応するように書かれていますが、多くの場合、同じロジックが繰り返されます。これは、ジェネリックプログラミングの考え方を応用することによって回避できます。
例えば、PHPの標準ライブラリの配列関数（array_*関数）は、配列の要素を処理するための多数の関数を提供します。これらの関数は、様々な種類の配列に対応するように書かれています。しかし、PHP 5.6からは、可変長引数機能を活用して、これらの関数をジェネリックに扱うことができます。たとえば、以下のようにarray_map関数を使用すると、異なるデータ型の配列に対しても同じロジックを適用できます。
function addOne($n) {
  return $n + 1;
}
$array1 = [1, 2, 3, 4];
$array2 = ['a', 'b', 'c', 'd'];
$newArray1 = array_map('addOne', $array1);
$newArray2 = array_map('addOne', $array2);
この例では、addOne関数を定義し、array_map関数を使用して、異なるデータ型の配列に同じ処理を適用しています。
このように、可変長引数やコールバック関数を活用することで、PHPにおいてもジェネリックプログラミングのコンセプトを実現することができます。