PHP8上級/準上級試験

お知らせ

  • PHP試験はバウチャーチケットを割引で購入できるようになりました。10名以上の団体受験を希望される法人は団体割引価格(10%引き)が適用されます。お問い合わせはこちらよりお願いします。
  • 理事長の吉政が執筆したコラム「PHP8上級試験の学習方法」をご参考ください。
  • PHP8上級試験で85%以上の正答者はPHP技術者認定ウィザードの呼称を使用できるようになりました。詳しくはこちらをご覧ください。

ITスキル標準(ITSS) について

経済産業省が定めたガイドライン「ITスキル標準(ITSS)」のキャリアフレームワークと認定試験・資格とのマップに職種:ソフトウェアディベロップメント、専門分野:応用ソフトのレベル2とレベル3に掲載されました。今後の学習の指針としてご参考ください。

PHP8技術者認定上級/準上級試験
概要:PHPの言語仕様から実用的なプログラミングテクニックまでの知識を問う試験
ITスキル標準(ITSS):準上級試験 レベル2  上級試験 レベル3
受験料金:15,000円(税抜)
※学校法人の生徒、先生は50%オフで受験できます。詳細はオデッセイ コミュニケーションズにお問い合わせください。(2019年4月から事前申請が不要になりました)
試験会場:全国のオデッセイコミュニケーションズCBTテストセンター
試験日:試験会場にてほぼ一年中実施しています。
設問数:30問
試験時間:2時間
出題形式:選択式
合格ライン:
7割以上の正解 上級試験合格

・PHPの言語仕様から実用的で高度なプログラミングテクニックをもつ上級者
5割以上-7割未満の正解 準上級試験合格
・オンラインマニュアル等を参考にプログラミングができるレベル
※8割五分以上の正解者はPHP技術者認定ウィザードの呼称とロゴマークを使用することができます。さらに合格体験記に応募されると記念品としてクリスタルペーパーウェイトとキングペチゾーがもらえます。詳しくはこちらをご覧ください。
主教材: https://www.php.net/
参考コラム:古庄親方の上級コラムPHP8上級試験の効率的な学習方法~合格への近道~PHP上級試験の試験コンセプトとは。そして就職活動への有効活用について
模擬問題:PRIME STUDY 

出題範囲:

No.セクション名出題割合
1インストールと設定3.3%
2言語リファレンス49.6%
3セキュリティ13.3%
4機能3.3%
5基本的な関数30.0%

受験をされる方は、本ページの下段にある「出題範囲解説と学習のコツ」を是非お読みください。学習効率が向上すると思います。

試験の内容は、以下の前提で作成されています。

  • 特に明記がない場合、使用しているPHPのバージョンは「8.0.*」であるとします。
  • php.iniはすべて「デフォルトの値が設定されている」ものとします。
  • 問題文のコードは、PHP 8.0.0 で動作確認をしています。
  • PHP5及びPHP7の各バージョンが明記されている場合、PHP 5.6.40、PHP 7.0.33、PHP 7.1.33、PHP 7.2.34、PHP 7.3.25、PHP 7.4.13 で動作確認をしています。
  • 「マニュアルの引用」は https://www.php.net/manual/ja/ から引用されています。(2021/01/29に内容を確認済み)

認定コース

無料の模擬試験

認定スクールであるプライム・ストラテジーが以下にて無料の模擬試験を提供しています。
https://study.prime-strategy.co.jp/

試験の申込方法

試験の申込方法:試験のお申し込みはこちらからお願いします。※試験結果は受験直後にスコアレポートを紙でいただけますので、その場で確認できます。認定証などは受験月の翌々月に発送されます。

※試験申込サイト: https://cbt.odyssey-com.co.jp/phpexam.html#php8

出題範囲解説 ~学習のコツ~

PHP8技術者認定試験上級/準上級試験の出題範囲について、少し詳しく解説をしていきます。
この文章が、受験をする人、受験を考えている人への一助になれば幸いです。以下のPDFとPDFの下段のWebページの内容は同一です。(どちらでも読めるようにしています)

1) インストールと設定

出題割合としては3%程度なのですが、基本的な所にもなりますので大枠は押さえておくとよいでしょう。
マニュアルの
インストールにあたっての一般的な注意事項
FastCGI Process Manager (FPM)
実行時設定(php.ini関連)
あたりに一通り目を通しておきましょう。

特にphp.iniの書き方や、「php.ini以外で設定を書ける場所(プログラム内に書ける ini_set() を含む)」など、少し突っ込んだ所まで理解をしておくとよいでしょう。

2) 言語リファレンス

出題割合も50%近くあり、大変にボリュームのある範囲です。
ここはもう少し詳細にかみ砕いて出題範囲を確認しておきましょう。

まずは基本の構文を確認しておきましょう。
基本的な構文は、ここ自体は試験範囲ではありませんが理解していることが前提になりますので、しっかりと把握しておきましょう。


変数
定数
演算子
制御構造
は、いずれも出題範囲になります。一度は一通り目を通して、コードを書いて、理解しておくとよいでしょう。

関数
クラスとオブジェクト
は重要です。特に「クラスとオブジェクト」については、マニュアルのページ数も多いのですがその分出題も多いので、ここは手を抜かずにしっかりと学習しておくとよいでしょう。

名前空間
エラー
例外(exceptions)
ジェネレータ
アトリビュート
リファレンスの説明
定義済みのアトリビュート
も出題範囲なので、一度は一通り目を通して、コードを書いて、理解しておくとよいでしょう。
なお一部「PHP 8.0ではまだ追加されていない」ものもあり、それらは出題範囲の対象外です。

定義済みの変数
定義済みの例外
定義済みのインターフェイスとクラスは出題範囲になります。
また(PHPマニュアル内の区分では「関数リファレンス」内にありますが)、Standard PHP Library (SPL)も出題範囲になります。記憶する必要はありませんが、様々なクラスがあるので、一度は「目を通したりミニマムコードを書いて動かしてみたり」して、触れておくとよいでしょう。

サポートするプロトコル/ラッパーも出題範囲です。
ここも、一度はコードを書いて、動きや概念を理解しておくとよいでしょう。

また、PHPのマニュアル区分では「付録」になるのですが。
「PHP x.x.x から PHP x.x.x への移行」のページのうち、「PHP x.xで増えたもの」がいくつか、出題範囲になっています。
PHP 7.0で増えたもの
PHP 7.1で増えたもの
PHP 7.2で増えたもの
PHP 7.3で増えたもの
PHP 7.4で増えたもの
PHP 8.0で増えたもの
が出題範囲になります。
「どのバージョンで増えたか」の暗記は不要ですが、「こんな事ができるようになった(機能の理解)」はしておきましょう。
「(どのバージョンで増えたか、の暗記は不要なので)最新のバージョンの機能を十全に理解していればよい」とも言えるのですが、(試験からは少し話がそれますが)実務ではどうしても「少し古いバージョンを扱わざるを得ないシーン」もあるかと思うので、マニュアルを一読はしておくとよいかと思います。

注意)
列挙型(Enum)
ファイバーは、いずれも「PHP 8.0よりは後に追加された機能」であるため、試験範囲対象外なので、出題範囲の対象外です。

3) セキュリティ

出題割合は13%程度ですが、重要な所なのでしっかりと学習しておきましょう。
マニュアルの「セキュリティ」のカテゴリ以外も含めて、以下が出題範囲となるのでしっかりと学習しておきましょう。
出題範囲の脆弱性と、それに関連する関数等のマニュアルのURLを記載します。
特にここでは「どのようなセキュリティホールがあり得るのか」「それに対して、プログラム側ではどのような対応ができたり、どのような注意が必要なのか」を併せて学んでおくとよいでしょう。

4) 機能

出題割合は3%程度になりますが、ここも一度は目を通しておくとよいでしょう。

マニュアルの
PHP をコマンドラインから使用する
ガベージコレクション
あたりが範囲になります。。

5) 基本的な関数

出題割合が30%ほどあり、またマニュアル上でもかなり多くのページがあります。
暗記の必要はありませんが、以下の点に注意しながら学習しておくとよいでしょう。

  • 出題範囲は「PHP コアに含まれる関数」が対象になります
  • 「関数名」や「引数の一覧」「戻り値」などを暗記する必要はありませんが、マニュアルにある例えば
    debug_backtrace(int $options = DEBUG_BACKTRACE_PROVIDE_OBJECT, int $limit = 0): array
    という記述をみて「関数名や、引数と戻り値の型や引数のデフォルト値」は理解できるようにしておきましょう
  • 数は多いですが、一度くらいは目を通しておくとよいでしょう
  • 何個か、でもよいので、実際にミニマムコードなど書いて挙動の確認をしておくとよいでしょう

出題の範囲は、以下になります。

エラー処理およびログ記録 http://php.net/manual/ja/book.errorfunc.php
PHP オプションと情報 http://php.net/manual/ja/book.info.php
Phar http://php.net/manual/ja/book.phar.php
HASH メッセージダイジェストフレームワーク http://php.net/manual/ja/book.hash.php
OpenSSL http://php.net/manual/ja/book.openssl.php
リフレクション http://php.net/manual/ja/book.reflection.php
日付・時刻クラス https://www.php.net/manual/ja/book.datetime.php
日付・時刻関数 https://www.php.net/manual/ja/ref.datetime.php
ディレクトリ http://php.net/manual/ja/book.dir.php
SPLのディレクトリ https://www.php.net/manual/ja/class.directoryiterator.php
SPLのディレクトリイテレータ https://www.php.net/manual/ja/class.recursivedirectoryiterator.php”
ファイル情報 http://php.net/manual/ja/book.fileinfo.php
SPLのファイル情報 https://www.php.net/manual/ja/spl.files.php
メール http://php.net/manual/ja/book.mail.php
Random 関数 https://www.php.net/manual/ja/ref.random.php
出力バッファリング制御 http://php.net/manual/ja/book.outcontrol.php
数学関数 http://php.net/manual/ja/book.math.php
数学関数 http://php.net/manual/ja/book.math.php
システムプログラムの実行 http://php.net/manual/ja/book.exec.php
POSIX http://php.net/manual/ja/book.posix.php
Tokenizer http://php.net/manual/ja/book.tokenizer.php
JavaScript Object Notation http://php.net/manual/ja/book.json.php
その他の関数 http://php.net/manual/ja/book.misc.php
ストリーム http://php.net/manual/ja/book.stream.php
URLs http://php.net/manual/ja/book.url.php
ネットワーク http://php.net/manual/ja/book.network.php
正規表現 (Perl 互換) http://php.net/manual/ja/book.pcre.php
文字列 http://php.net/manual/ja/book.strings.php
配列 http://php.net/manual/ja/book.array.php
クラス/オブジェクトの情報 http://php.net/manual/ja/book.classobj.php
変数操作 http://php.net/manual/ja/book.var.php
文字タイプチェック http://php.net/manual/ja/book.ctype.php
関数処理 http://php.net/manual/ja/book.funchand.php
Document Object Model http://php.net/manual/ja/book.dom.php
libxml http://php.net/manual/ja/book.libxml.php
SimpleXML http://php.net/manual/ja/book.simplexml.php
データのフィルタリング http://php.net/manual/ja/book.filter.php

その他

他の出題範囲に混ざっているのですが、PHPマニュアルの 付録 の、以下の各ページも一度は読んでおくとよいでしょう。

PHP のデバッグ
Configure オプション
php.ini ディレクティブ
拡張モジュールの一覧/分類
関数エイリアスのリスト
予約語の一覧
利用できるフィルタのリスト
ユーザーレベルでの命名の手引き

最後に、古庄親方から一言。

現在、機構のWeb Page内でPHP8上級試験のコラムを書いています。
https://www.phpexam.jp/archives/category/column/oyakata
日本語の解説部分は比較的少なく、主にコードで説明をしているので。まずは各々の知識を「理解しているか? の確認」ができるかと思います。書かれているコードが「理解している範疇のもの」なのか「知らない知識を含むもの」なのかを確認していただけます。
「理解しているコードの書き方」はそのまま読み流し、「不安がある箇所」について、マニュアルなどで再勉強するとよいでしょう。

また、コラムの日本語部分の説明をもう少し追記して電子書籍にする事も検討しておりますので、どうぞご期待ください。

PHP技術者認定機構 CTO 古庄道明