お知らせ
- 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の言語仕様から実用的で高度なプログラミングテクニックをもつ上級者
・1275点以上の合格者はPHP8技術者認定ウィザードの呼称と以下のロゴを使用することができます。また、合格体験記に応募されると、クリスタルペーパーウェイトとキングペチゾーがもらえます。詳しくはこちらをご覧ください。
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を記載します。
特にここでは「どのようなセキュリティホールがあり得るのか」「それに対して、プログラム側ではどのような対応ができたり、どのような注意が必要なのか」を併せて学んでおくとよいでしょう。
- XSS
- https://www.php.net/manual/ja/function.htmlspecialchars.php
- SQL-Injection
- http://php.net/manual/ja/book.pdo.php
- CSRF
- https://www.php.net/manual/ja/function.uniqid.php
- https://www.php.net/manual/ja/ref.random.php
- https://www.php.net/manual/ja/function.openssl-random-pseudo-bytes.php
- Cookie
- https://www.php.net/manual/ja/function.setcookie.php
- https://www.php.net/manual/ja/features.cookies.php
- セッション
- https://www.php.net/manual/ja/book.session.php
- ログイン(パスワード認証)
- https://www.php.net/manual/ja/book.password.php
- ディレクトリトラバーサル
- https://www.php.net/manual/ja/function.basename.php
- クリックジャック
- https://www.php.net/manual/ja/function.header.php
- コマンドインジェクション
- https://www.php.net/manual/ja/function.escapeshellarg.php
- https://www.php.net/manual/ja/function.escapeshellcmd.php
- ファイルアップロード
- https://www.php.net/manual/ja/features.file-upload.php
- 安全ではないデシリアライゼーション
- https://www.php.net/manual/ja/function.serialize.php
- https://www.php.net/manual/ja/function.unserialize.php
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 古庄道明