「PHP」の版間の差分
Gnusocialjp (トーク | 投稿記録) (declare) |
Gnusocialjp (トーク | 投稿記録) (type_strict) |
||
72行目: | 72行目: | ||
# ticks | # ticks | ||
# encoding | # encoding | ||
# strict_types | # strict_types: =1の指定でPHPの暗黙の型変換を無効にする (ストリクトモード)。ただし、影響するのはスカラー型のみ。型が違う場合、TypeErrorの例外が発生する。 | ||
指令はファイルコンパイル時に処理されるので、リテラル値のみが使用可能で、変数や定数は使用不能。 | 指令はファイルコンパイル時に処理されるので、リテラル値のみが使用可能で、変数や定数は使用不能。 | ||
78行目: | 78行目: | ||
declareブロックの <statement> は、<directive> の影響を受ける実行部だ。 | declareブロックの <statement> は、<directive> の影響を受ける実行部だ。 | ||
declare文はグローバルスコープで使われる。登場以後のコードに影響する。ただし、他のファイルからincludeされても、親ファイルには影響しない。だから安心して使える。 | |||
型安全にするために、基本的にPHPファイルの冒頭に<code>declare(strict_types=1);</code>を書いておいたほうがよいだろう。 |
2023年12月12日 (火) 11:05時点における版
About
PHPはプログラミング言語だ。汎用的なプログラミング言語だが、主にウェブサーバー上のソフトウェアで使用される。
GNU socialはPHPで記述されている。他にもWordPress・NextCloudなどがPHPで記述されている。これらのPHP製ソフトウェアはVPSだけではなく安価なレンタルサーバーでも動作するため、低コストで運用することができる。
PHPの公式リファレンスは日本語版があり、わかりやすくまとまっている。
ウェブ上にはPHPに関するTipsが多く公開されており、大抵の疑問はウェブ検索で解決できる。
Version
PHPは言語の版数が上がる際、過去の版と互換性の無い破壊的変更がなされることがある。
開発者はこのリスクを軽減するために、非推奨の言語機能を避け、実行時の警告 (warning) を適切に処理するべきだ。
GNU socialは現在PHP 7系で動作する様に記述されており、PHP 8系への対応は作業途中だ。
PHP v8
PHP v8になっていろいろ更新が入った。特にPHP v7.4からv8に更新する際のポイントがあるので整理する (行事: 「12月にPHP8.3が出るので、PHP8で増えた文法をおさらいしましょうセミナー」参加報告 | PHP8対応の肝は型とエラーレベル | GNU social JP Web)。
大きく以下2点がある。
- エラーレベルの上昇。
- 型の厳格化。
エラーレベルが1段階上がったため、今までWarningで問題なかったものがFatal Errorになって動作しなくなる。他に、型が厳格になっている。
具体的には、php.ini/.user.iniで以下を指定して、PHP v7.4時点で警告にできるだけ対応しておく。
error_reporting=E_ALL ; -1
続いて、phpソースファイルに以下を記入して型を厳密にしておく。
declare(strict_types=1);
チェックツールがあるのでこれを使うと問題箇所などがわかる。
- PHP CodeSniffer
- PHPStan
- Rector
まず上記2個を試して、おまけでRectorも試すとよい。
PHPUnit
PHPUnitを使用すれば自動単体テスト (Unit test) が可能だ。
Version
情報源: Supported Versions of PHPUnit – The PHP Testing Framework。
PHPUnitのバージョンごとに対応しているPHPのバージョンが決まっている。
PHP v7.4に対応してい最後のバージョンはPHPUnit 9なので、当分はこれを使うのが良い。
Language Reference
Control Structures
Source: PHP: Control Structures - Manual.
declare
Source: PHP: declare - Manual.
PHPUnitのサンプルコード (Getting Started with Version 9 of PHPUnit – The PHP Testing Framework) などで冒頭に以下の記述がある。
<?php declare(strict_types=1);
これの意味が分かっていなかったので整理する。
declare文 (construct) は、コードブロックの実行指令となる。以下の構文となる。
declare (<directive>) <statement>
<directive> はdeclareブロックの挙動を指示する。指定可能なものは以下3個だ。
- ticks
- encoding
- strict_types: =1の指定でPHPの暗黙の型変換を無効にする (ストリクトモード)。ただし、影響するのはスカラー型のみ。型が違う場合、TypeErrorの例外が発生する。
指令はファイルコンパイル時に処理されるので、リテラル値のみが使用可能で、変数や定数は使用不能。
declareブロックの <statement> は、<directive> の影響を受ける実行部だ。
declare文はグローバルスコープで使われる。登場以後のコードに影響する。ただし、他のファイルからincludeされても、親ファイルには影響しない。だから安心して使える。
型安全にするために、基本的にPHPファイルの冒頭にdeclare(strict_types=1);
を書いておいたほうがよいだろう。