第1回 PHP 7 初級 模擬試験 第1回 PHP 7 初級 模擬試験 へようこそ。 以下の各項目を入力後、「次へ」をクリックして模擬試験を開始してください。 ※あらかじめ利用規約をご確認ください(プライム・ストラテジーから採用やイベントの情報など届くことがあります)。 ※結果の詳細は入力いただいたメールアドレス宛てにのみお送りします。必ず確認可能なメールアドレスを入力してください。 お名前 メールアドレス(結果の詳細をお送りします) 利用規約に同意する。 1. PHPの特徴に関する次の記述のうち、誤っているものはどれか。 PHPはWebサーバで実行されることからサーバサイド言語と呼ばれる。Webサーバが生成したWebページをクライアントに送った後のプロセスに、PHPは関与しない。 PHPはオープンソースプロジェクトであるためライセンス料金などの費用はかからないが、その内部を調べる際には制約がある。 Windows、Mac OS X、Linux、その他多くのバージョンのUnixが動作するWebサーバコンピュータで、PHPは利用できる。 Apach、Microsoft Internet InformationServer(IIS)、その他CGI規格をサポートするWebサーバで、PHPは利用できる。 MySQL、PostgreSQL、Oracle、Microsoft SQL Server、SQLite、Redis、MongDBなどのデータベースとも、PHPは連携する。 2. 次のコードに関する記述のうち、誤っているものはどれか。 [ コード ]【A】【B】ここにプログラムの概要をコメントとして記述する。print 【C】<form method="post" action="$_SERVER[PHP_SELF]"> …【D】Your Name: <input type="text" name="user" /><br /><button type="submit">Say Hello</button></form>_END_;?> 【A】にPHPの開始タグ「<?php」を記述すると、PHPエンジンはその直後からPHP終了タグまでの間にあるコマンドを実行する。 【B】の行に「//」や「#」を記述するとコメント行としてPHPエンジンに無視される。「/*」と「*/」でくくることで複数行にわたるコメントを記述することもできる。 【C】に「>>>_START_」を記述すると、その直後から「_END_」の直前までがヒアドキュメントとしてprint命令に渡され表示がなされる。 【D】行の「`$_SERVER[PHP_SELF]`」は特別なPHP変数であり、現在のページの、プロトコルやホスト名を含まないURLが含まれる。 このプログラムは、userの値をサブミットするHTMLフォームを出力するものである。 3. テキスト操作に関するコードの説明のうち、誤っているものはどれか。(%は全角記号で書かれているが、半角記号として回答すること) 「print ucwords(strtoupper('kusanagi saya'));」の実行結果は「KUSANAGI SAYA」である。 「print substr('abcde', 0, 3);」の実行結果は「abcd」である。 「print strlen(trim('01230'));」の実行結果は「5」である。 「printf('%05d', '123');」の実行結果は「00123」である。 「print str_replace('【A】', '3', 'I have {num} cats.');」の【A】には{num}が入り、実行結果は「I have 3 cats.」となる。 4. 次のコードの実行結果として正しいものはどれか。 $a = 2 + 3 * 6;$b = $a % 7;$c = $b ** 2;print($c); 4 8 12 16 36 5. 次のコードの実行結果として正しいものはどれか。 $n = 2;$p = 3;++$n;$p *= 2;$a = "$n, $p";--$n;$p *= 3;$b = "$n, $p"; print $a . ' / ' . $b; 3,6 / 1, 9 3, 6 / 2, 18 3,9 / 1, 9 3, 9 / 2, 27 3, 9 / 2, 279 6. 次のコードの【 A 】に入れた場合にtrueが返される組み合わせとして正しいものはどれか。 if(【 A 】) { print("true");} else { print("false");} 【1】"php" > "perl"【2】0 != "0"【3】5 - 6 + 1 【4】"false"【5】0 + "false"【6】"543a" < 56【7】abs(-6) > 10 / 2 【1】【4】 【2】【6】 【4】【7】 【1】【4】【7】 【1】【2】【4】【7】 7. コードAをコードBで代替して同じ実行結果を得たい場合、コードBの【 A 】に入るものとして正しいものはどれか。 [ コードA ]$i = 1;while($i <= 20) { print ($i. ","); $i += 2;} [ コードB ]【 A 】{ print ($i.",");} while($i <= 20, $i += 2) while($i += 2; $i <= 20;) for($i <= 20, $i += 2) for($i += 2; $i <= 20; $i = 1) for($i = 1; $i <= 20; $i += 2) 8. 次のコードの実行結果として正しいものはどれか。 $num[0] = 'zero';$num[1] = 'one';$num[3] = 'three';$num[2] = 'two';print ("【loop_A】");for ($i=0, $count_num = count($num); $i < $count_num; $i++) { print "$num[$i]"."," ;}print ("【loop_B】");foreach ($num as $i => $n) { print "$i"."," ;} 【loop_A】0,1,3,2,【loop_B】zero,one,two,three, 【loop_A】0,1,2,3,【loop_B】0,1,3,2, 【loop_A】zero,one,two,three,【loop_B】zero,one,three,two, 【loop_A】zero,one,two,three,【loop_B】0,1,3,2, 【loop_A】zero,three,one,two,【loop_B】0,1,2,3, 9. 配列のソートに関する次の記述のうち正しいものはどれか。 sort()関数は配列をキーで降順にソートする。 sort()関数はソートの時に配列のキーをリセットするため、連想配列にだけ使用すべきである。 asort()関数は配列を要素の値で昇順にソートする。この関数は連想配列のキーと値を保持する。 ksort()関数は配列をキーで昇順にソートする。この関数はキーと値のペアを保持しない。 rsort()関数、arsort()関数、krsort()関数では、最小またはアルファベットで最初のキーや値が先頭となり、以降の要素が降順に並ぶよう配列をソートする。 10. 次の実行結果を得たい場合、コードの【A】と【B】に入る組み合わせとして正しいものはどれか。 [ 実行結果 ]snowdrop, marigold [ コード ]$flowers = array(array('rose','hibiscus','tulip'),array('snowdrop','lily','gardenia'),array('lavender','gentian','pansy'),array('dandelion','sun flower','marigold'));print 【A】.", ".【B】; 【A】$flowers[1][1]【B】$flowers[4][3] 【A】$flowers[1][1]【B】$flowers[3][2] 【A】$flowers[1][0]【B】$flowers[3][2] 【A】$flowers[1][0]【B】$flowers[3][3] 【A】$flowers[2][1]【B】$flowers[4][3] 11. 関数に関する次の記述のうち誤っているものはどれか。 PHPエンジンはプログラムファイル全体を読み込み、ファイル内のコマンドを実行する前にすべての関数定義を処理する。そのため関数は呼び出しの前でも後でも定義することができる。 関数宣言で指定する引数のデフォルト値は、リテラルのほか変数にすることもできる。 複数の引数をとる関数において、オプション引数はすべての必須の引数の後に記述すべきである。 関数名は変数名と同じ規則に従う。関数名は文字、アンダースコアから開始し、2番目以降は文字、数字、アンダースコアを使うことができる。 一つのreturn命令文は一つの値しか返せない。カンマ区切りにして複数の値を返すようなことはできない。関数から2つ以上の値を返したい場合には一つの配列に複数の値を入れてその配列を返すとよい。 12. 次のコードの実行結果として正しいものはどれか。 $val = 'a';$val = 'b';print ('【A】' . $val);function func($val = 'c') { $val = 'd'; print ('【B】' . $val); global $val; print ('【C】' . $val); $val = 'e'; print ('【D】' . $val); $val = 'f';}$val = 'g';func($val);print ('【E】' . $val); 【A】b 【B】c 【C】g 【D】e 【E】g 【A】b 【B】c 【C】b 【D】e 【E】f 【A】b 【B】c 【C】b 【D】e 【E】g 【A】b 【B】d 【C】g 【D】e 【E】f 【A】b 【B】d 【C】b 【D】e 【E】g 13. 次のコードの実行結果として正しいものはどれか。 $numbers = array(array('1', '2', '3'), array('4', '5', '6'), array('7', '8', '9'));function judge($arg) { $arg = $arg ** 2; if ($arg < 20){ return array($arg, "low"); } elseif ($arg < 45) { return array($arg, "middle"); } else { return array($arg, "high"); } }$result = judge($numbers[1][2]);print($result[0]." => ". $result[1]); 1 => low 4 => low 16 => low 36 => middle 64 => high 14. 次の実行結果を得たい場合に、コードの【A】【B】【C】に入るものとして正しい組み合わせはどれか。 [ 実行結果 ]16 is a multiple of 8, 13 is indivisible by 4 [ コード ]function calc($a, $b) { if($a % $b !== 0){ 【A】 new Exception($a. ' is indivisible by '. $b); } return ($a.' is a multiple of '. $b);}try { print calc(16, 8). ", "; print calc(13, 4). ", "; print calc(10, 2). ", ";} 【B】 (Exception $e) { print $e->【C】;} 【A】through 【B】catch 【C】getMsg() 【A】through 【B】error 【C】print() 【A】through 【B】error 【C】getError() 【A】throw 【B】error 【C】print() 【A】throw 【B】catch 【C】getMessage() 15. クラスに関する次の記述のうち誤っているものはどれか。なお「¥」はバックスラッシュに読み替えること。 クラスはコンストラクタと呼ばれる特殊なメソッドを備えることができる。PHPでは、クラスのコンストラクタメソッドは必ずアンダースコア2つから始まる「__construct()」という名前であり、コンストラクタはオブジェクトを生成するときに呼び出される。 コードの構造化に役立つオブジェクトの特徴としてサブクラスの概念がある。サブクラスを使うと、独自の機能を追加してクラスを再利用できる。サブクラス(子クラス)は既存クラス(親クラス)のすべてのメソッドとプロパティから始まり、変更や追加も可能である。 クラスのプロパティのアクセス権の指定方法には、publicのほかに、privateやprotectedがある。privateの指定はそのクラス外のコードがプロパティにアクセスできないようにすることを意味する。protectedの指定は、そのクラス外でプロパティにアクセスできるコードはサブクラスのコードだけであることを意味する。 クラスには静的メソッドを定義できる。静的メソッドはクラス自体で実行されるほか、特定のオブジェクトインスタンスでも実行されるので$this変数が使える。 名前空間内で定義したクラスを使うため名前空間を取り入れる最も明確な方法は「¥」(トップレベル名前空間)から始め、クラスが含まれる名前空間名を記述し、さらに「¥」を付け加えてクラス名を記述する方法である。先頭の「¥」がない場合のクラス参照の解決は、現在の名前空間(参照時にアクティブな名前空間)を基に行われる。 16. $_SERVER グローバル配列に関する次の記述のうち誤っているものはどれか。 $_SERVER の PHP_SELF 要素は、現在のリクエストの URL のパス名部分を保持する。例えば「http://www.example.com/colors/red.php」のPHP スクリプトにアクセスする場合、$_SERVER['PHP_SELF'] は「/red.php」になる。 Web ブラウザが現在のページをリクエストするのに使った HTTP メソッドは、$_SERVER['REQUEST_METHOD'] に保持される。多くの場合は GET か POST である。 $_SERVER の REMOTE_ADDR 要素は、Web サーバにリクエストを行ったユーザの IP アドレスを保持する。 $_SERVER の QUERY_STRING 要素は、 URL の疑問符 ? の後ろに続く URL パラメータを保持する。例えば「http://www.example.com/colors/red.php?fruits=apple&flower=rose」の PHP スクリプトにアクセスする場合、 $_SERVER['QUERY_STRING'] は「fruits=apple&flower=rose」になる。 $_SERVER の SERVER_NAME 要素は、PHP エンジンが動作している Web サイトの名前を保持する。 17. コードAによりWeb上で表示されるフォームにおいて、テキストボックスに「30」を入力し、メニューで「Yellow Banana」を選択してサブミットした場合、2つの値(「30」「Yellow Banana」)を表示させるコードBの【A】【B】に入る正しい組み合わせはどれか。 [ コードA ]<form method="POST" action="fruits.php"> <input type="text" name="fruits_id"> <select name="category"> <option value="red">Red Apple</option> <option value="yellow">Yellow Banana</option> <option value="orange">Orange Mango</option> </select> <input type="submit" name="submit"></form> [コードB]Here are the submitted values:<br />value1: <? php print 【A】 ?? '' ?><br />value2: <? php print 【B】 ?? '' ?> 【A】$_POST['input'] 【B】$_POST['select'] 【A】$_POST['text'] 【B】$_POST['yellow'] 【A】$_POST['fruits_id'] 【B】$_POST['category'] 【A】$_GET['input'] 【B】$_GET['select'] 【A】$_GET['fruits_id'] 【B】$_GET['category'] 18. Webフォームでサブミットされたデータの検証に関する次の記述のうち、誤っているものはどれか。 サブミットされた値が整数か浮動小数点数であることを確認するには、filter_input()関数およびFILTER_VALIDATE_INTとFILTER_VALIDATE_FLOATフィルタを使うことができる。 同値演算子は2つの等号(==)であらわされ、2つの値を比較し、値が同じで同じ型の場合にtrueと評価するものである。 文字列要素の検証時にはtrim()関数で先頭と末尾のホワイトスペースを取り除いておくと後の取り扱いに便利である。 必須項目が未入力でないかを確認するには、strlen()関数で要素の長さを調べるとよい。 有効なメールアドレスであることの検証は、filter_input()関数およびFILTER_VALIDATE_EMAILフィルタを使うことができる。 19. Webフォーム利用した攻撃に関する次の記述の【A】【B】【C】に入る組み合わせとして正しいものはどれか。 悪意あるユーザがWebサイトに不正なHTMLやJavaScriptをアップロードしてサイト利用ユーザのブラウザ上で実行可能にし偽ページへ誘導するなど利用ユーザに被害をもたらす【A】を防ぐには、未処理の外部入力を決して表示しないことが重要である。そこで、疑わしい部分(HTMLタグなど)を取り除くか特殊文字をエンコードして、埋め込まれたHTMLやJavaScriptをブラウザが実行しないようにするための関数がPHPには用意されている。【B】関数は文字列からHTMLタグを取り除き、【C】関数は特殊なHTML文字をエンコードする。 【A】ブルートフォース攻撃 【B】strip_html() 【C】htmlencodes() 【A】クロスサイトスクリプティング攻撃 【B】strip_tags() 【C】htmlentities() 【A】ブルートフォース攻撃 【B】strip_tags() 【C】htmlentities() 【A】DoS/DDoS攻撃 【B】strip_html() 【C】str_entities() 【A】クロスサイトスクリプティング攻撃 【B】strip_html() 【C】htmlencodes() 20. ユーザ名「dog」とパスワード「bowwow」を使って、db.example.comで動作するMySQLサーバの「animals」という名前のデータベースに接続したい場合、データベースとのやり取りに使う新たなPDOオブジェクトを返す次のコードの【A】に入るものとして正しいものはどれか。 $dsn = '【A】';$user = 'dog';$password = 'bowwow';try { $dbh = new PDO($dsn, $user, $password);} catch (PDOException $e) { echo 'Connection failed';} dbname=animals;host=db.example.com:mysql dbname=animals;host=db.example.com;db=mysql db=mysql;dbname=animals;host=db.example.com mysql:dbname=animals;host=db.example.com db:mysql;dbname:animals;host:db.example.com 21. 次のSQL文を実行して、データベース「flowershop」にテーブル名「flowers」のデータベースを作成した。このデータベーステーブルに関するSQL文の説明として誤っているものはどれか。 CREATE TABLE flowers (flower_id INTEGER PRIMARY KEY,flower_name VARCHAR(255),price DECIMAL(6,2)); テーブル「flowers」のすべての行を削除するSQL文は「DELETE FROM flowers」である。 テーブル「flowers」内のすべての行のflower_nameを「iris」に変更する場合のSQL文は「UPDATE flowers SET flower_name='iris'」である。 テーブル「flowers」に、idが「1」、flower_nameが「rose」、priceが「300」円の新たなデータを追加する場合のSQL文は、「ADD INTO flowers (flower_id, flower_name, price) VALUES (1, 'rose', 300)」である。 データベース「flowershop」からテーブル「flowers」とその中のデータを削除する場合のSQL文は「DROP TABLE flowers」である。 SQL文をコマンドとして送るには、new PDO()でデータベースに接続した後にexec()関数を使う方法がある。 22. テーブル「flowers」に次のようなデータがあり、実行結果として「iris, sun flower, jasmine,」を得たい場合、コードの【A】【B】【C】に入る組み合わせとして正しいものはどれか。 [ データ ]+-----------+-------------+--------+| flower_id | flower_name | price |+-----------+-------------+--------+| 1 | iris | 300.00 || 2 | iris | 500.00 || 3 | sun flower | 700.00 || 4 | tulip | 350.00 || 5 | jasmine | 450.00 |+-----------+-------------+--------+ [ コード ](省略)try{ $db = new PDO($dsn, $user, $password);} catch (PDOException $e){ echo 'Connection failed'. $e->getMessage();}$q = $db->【A】("【B】 * FROM flowers where price > 350");while ($row = $q->【C】) { print "$row[flower_name]".", ";} 【A】fetch() 【B】PICK 【C】fetch() 【A】exec 【B】INSERT 【C】catch() 【A】exec 【B】SELECT 【C】call() 【A】query 【B】CHOOSE 【C】catch() 【A】query 【B】SELECT 【C】fetch() 23. テーブル「flowers2」に次のようなデータがある場合に、以下のコードの実行結果として正しいものはどれか。 [ データ ]+-----------+-------------+--------+| flower_id | flower_name | price |+-----------+-------------+--------+| 1 | rose | 450.00 || 2 | tulip | 730.00 || 3 | carnation | 300.00 || 4 | violet | 400.00 || 5 | pansy | 400.00 |+-----------+-------------+--------+ [ コード ](省略)try{ $db = new PDO($dsn, $user, $password);} catch (PDOException $e){ echo 'Connection failed'. $e->getMessage();}$q = $db->query("SELECT * FROM flowers2 where price > 350 ORDER BY price DESC, flower_name");while ($row = $q->fetch()) { print "$row[flower_name]".", ";} carnation, violet, pansy, rose, tulip, violet, pansy, rose, tulip, tulip, rose, violet, pansy, tulip, rose, pansy, violet, tulip, rose, violet, pansy, carnation, 24. 次のテンプレート「template.html」を用いて「page.html」ファイルに結果を出力させたい場合、コードの【A】【B】【C】に入るものとして正しい組み合わせはどれか。 [ template.html ]<html> <head></head> <body> <h1>{hello}</h1> <p>Today is {today}.</p> </body></html> [ コード ]$page = 【A】('template.html');$date = date("Y-m-d H:i:s");$page = 【B】('{today}', $date, $page);if (date('H')<12){ $page = 【B】('{hello}', 'Good morning!',$page);} elseif(date('H')>=12 && date('H') < 18) { $page = 【B】('{hello}', 'Good afternoon!',$page);} else { $page = 【B】('{hello}', 'Good evening!', $page);}【C】; 【A】fgethtml 【B】str_replace 【C】fputhtml('page.html', $page) 【A】fgethtml 【B】str_replace 【C】fputhtml($page, 'page.html') 【A】file_get_contents 【B】str_replace 【C】file_put_contents($page, 'page.html') 【A】file_get_contents 【B】str_replace 【C】file_put_contents('page.html', $page) 【A】file_gets_content 【B】file_replace 【C】file_gets_content('page.html', $page) 25. ファイルの部分的な書き込みに関する次の記述のうち誤っているものはどれか。 fgets()関数は、ファイルから1行を読み込んで文字列として返す働きをする。 feof()関数は、現在位置がファイルの末尾を超えたらtrueを返す働きをする。 fclose()はファイルへの接続をクローズする。 fwrite()関数は、書き込みを許可するモードで開かれたファイルに対して、文字列を書き込む働きをする。 fopen()関数はファイルへの接続をオープンし、プログラムでのその後のファイルへのアクセスに使う変数を返す働きをする。fopen()の第1引数にはファイルモード、第2引数にはアクセスしたいファイル名を指定する。 26. クッキーの設定に関する次の記述のうち誤っているものはどれか。 setcookie()関数の第1引数にはクッキーの名前を、第2引数にはクッキーの値を指定する。setcookie()に指定するクッキーの値には、文字列か数字、配列を使うことができる。 setcookie()関数の第3引数には、クッキーの有効期限をオプションとして指定できる。指定しない場合のクッキーのデフォルトの寿命はWebクライアント(ブラウザ)の終了時である。 setcookie()関数の第4引数には、サーバー上でのクッキーを有効としたいパスを、また第5引数にはクッキーを有効としたいドメインを、それぞれオプションとして指定できる。 setcookie()関数の第6引数にtrueの値を指定すると、URLがhttpsで始まる安全な接続でのみクッキーを送るようにWebクライアントに通知される。setcookie()関数の第7引数にtrueの値を指定すると、HTTPを通してのみクッキーにアクセス可能となる。これはクロスサイトスクリプティング攻撃をある程度予防することになる。 クッキーを削除するには「setcookie('cookie_name','')」のようにして、削除したいクッキーの名前と、クッキーの値として空の文字列とを指定してsetcookie()を呼び出せばよい。 27. セッションに関する次の記述のうち誤っているものはどれか。 セッションはデフォルトではPHPSESSIDというクッキーを使う。ページでセッションを開始するときにはPHPエンジンはこのクッキーの存在を調べて、存在しなければ設定する。 ページでセッションを使うには、setcookie()と同様に、スクリプトの最初で出力を送る前にsession_start()を呼び出す必要がある。 セッションデータは$_SESSIONスーパーグローバル配列に格納される。セッションデータを操作するには、この配列の要素を読み込んで変更する。 session.gc_maxlifetime構成ディレクティブはセッションをアクティブに保つためにリクエスト間に許されるアイドル時間を制御する。デフォルト値は30分である。 $_SESSIONから指定のキーの値を削除するにはunset()を使うことができる。 28. 指定したURLの情報を取得する次のコードの【A】【B】【C】に入る組み合わせとして正しいものはどれか。 $ch = 【A】('https://study.prime-strategy.co.jp/');【B】($ch, CURLOPT_RETURNTRANSFER, true);$fact = 【C】($ch);print $fact 【A】curl_set 【B】curl_opt 【C】curl_query 【A】curl_init 【B】curl_opt 【C】curl_act 【A】curl_init 【B】curl_setopt 【C】curl_exec 【A】curl_set 【B】curl_opt 【C】curl_exec 【A】curl_setinit 【B】curl_setopt 【C】curl_setact 29. ファイル関数を使ったURLアクセスに関する次の記述のうち誤っているものはどれか。 file_get_contents()は、ローカルファイルだけではなくURLも理解し、URLにアクセスしてその情報を取得することができる。 クエリ文字列パラメータを含むAPI URLを作成する場合には、http_build_query()関数が便利である。http_build_query()関数にパラメータ名と値の連想配列を指定すると、key=valueのペアの文字列を&で連結して適切にエンコードして返す。 json_encode()関数はJSONオブジェクトをPHPオブジェクトに変換し、JSON配列をPHP配列に変換する。一方、json_decode()関数にPHPデータ型(文字列、数値、オブジェクト、配列など)を渡すと、渡されたもののJSON表現を含む文字列を返す。 file_get_contentsを使ったURL取得の際、リクエストが成功しない場合にfile_get_contents()はfalseを返し、PHPエンジンはエラーメッセージを表示する。 HTTPリクエストとレスポンスの詳細を制御する必要がある場合には、file_get_contentsよりもcURL関数が便利である。 30. エラーに関する次の記述のうち誤っているものはどれか。 エラーメッセージをブラウザに表示するにはdisplay_errors構成ディレクティブをOnに、表示させないようにするにはOffに設定する。 エラーをWebサーバのエラーログに送信するには、log_errorsをOnに設定する。 PHPエンジンが生成するエラーメッセージは「Parse Error」「Fatal Error」「Warning」「Notice」、そして「Strict Notice」または「Deprecation Warning」の5つのいずれかに該当する。 error_reporting構成ディレクティブはPHPエンジンが報告するエラーの種類を制御する。 PHPはパースエラーが発生するとプログラムの動作を停止する。ほかにプログラムの動作が停止されるのは、Fatal ErrorとWarningが発生した場合である。 31. デバッグに関する次の記述のうち誤っているものはどれか。 編集中のファイルとWebブラウザで見ているページが同期していることを確認するには、「die('This is:' . __FILE__);」のようなdie()を呼び出す行をプログラムの先頭に一時的に追加する方法がある。 デバッグ出力に配列を含めるには、配列のうち一部の特定要素の詳細を出力するvar_dump()が便利である。 デバッグの際にprintやprint_rも使うことができる。printは配列を扱えないが、print_rは配列を扱える。 Webブラウザでvar_dump()の出力を適切にフォーマットする方法として、HTMLタグの<pre>と</pre>でvar_dump()の出力を囲む方法がある。 デバッグメッセージをWebサーバのエラーログに送信するには、error_log()関数を使うことができる。 32. プログラムの動作テストに関する次の記述のうち誤っているものはどれか。 生産性の高いテストに重要な原則は、テストする対象をできるだけ一つにまとめることである。 テスト関数外には、内容や振る舞いがテスト関数の結果を変える可能性をもつような、グローバル状態や寿命の長いリソースは存在しないことが望ましい。 テスト関数は、実行順にかかわらず同じ結果となるべきである。 ユニット・テストとは、プログラムを構成するクラスや関数などの比較的小さな単位(ユニット)が正しく動作しているかどうかを確認するためのテストである。 PHPUnitは、ユニット・テストの手順をPHPコードにして、コマンド一つで繰り返し自動的に実行することができるようにするユニット・テスト用フレームワークである。 33. テスト駆動開発に関する次の記述のうち誤っているものはどれか。 テスト駆動開発とは、プログラムに必要な機能について最初にテストを書き、テストが動作する必要最低限の実装を行った後でコードをリファクタリングするという短い工程を繰り返す、プログラム開発手法の一つである。 テスト駆動開発は、テストを有効に活用するプログラミングテクニックとして広く使われている。 テスト駆動開発はあらゆる状況に適しており、何を行う必要があるかを明確にし、コードを網羅する包括的なテストを作成できる。 テスト駆動開発では、プログラムの動作に異常がないことをテストで確認しながら作業を実施することができるため、開発の手戻りを抑えることが可能である。 テスト駆動開発によって、優れたプログラムを速やかに提供することが可能である。 34. ソフトウェア開発全般に関する次の記述のうち誤っているものはどれか。 バージョン管理システムは一人で取り組んでいるプロジェクトにおいても有効である。例えば以前の時点でのコードの中身を確認できるため、バグがどの時点で入り込んだのかを割り出りだすことができる。 PSRとはPHP標準勧告のことで、PHPのコーディング規約である。 課題管理システムはバグ、機能要求、そのほか対処する必要のある作業リストを保持する確実な方法である。 稼働中のファイルを直接編集することによる問題を回避するためには、開発環境と本番環境が必要である。本番環境は作業を行う場所であり、開発環境はコードを実行して実際のユーザとのやり取りを試みる場所である。 「負荷が高くなっても問題がほとんどない」ということを事前に保証しておくよりも、最初は軽い負荷でおおむね正常に機能させることの方が重要であるといえる。 35. 今日の日付「2020年7月7日」を「2020/07/07」のフォーマットで出力したい場合、コードの【A】に入る正しいものはどれか。 $date = new DateTime();print $date->format('【A】'); Y/m/d y/m/D Y/M/D Y/n/j Y/F/d 36. Composerに関する次の記述のうち誤っているものはどれか。 Composerとは、PHPのパッケージ管理システムである。 例えば使用中のパッケージの新バージョンがリリースされた場合にも、Composerによれば簡単にアップグレードができる。 WindowsでもComposerを使うことができる。 Composerでパッケージをインストールしプログラムでパッケージを使えるようにするには、requireコマンドを用いることができる。 プログラムをバージョン管理システムにチェックインしている場合はComposerとの連携ができない。 37. メールの送信に関する次の記述のうち誤っているものはどれか。 Swift Mailerとは、PHPのメール送信ライブラリである。 Swift MailerはComposerを使ってインストールすることができる。 Swift Mailerでメールメッセージを作成する際に、setFrom()とsetTo()の引数には、文字列でのメールアドレスか、キーと値のペアとしてのメールアドレスと氏名にすることができる。 Swift MailerのsetBody()メソッドは、プレーンテキストのメッセージ本文を設定するものであり、Swift MailerではHTMLメールを送信することはできない。 Swift Mailerは、メッセージへのファイルの添付、メッセージへの任意のヘッダの追加、開封確認のリクエスト、SSLでのメールサーバへの接続などを行うことができる。 38. フレームワークに関する次の記述のうち誤っているものはどれか。 アプリケーションフレームワークとは、一般的なタスクを容易に実現するための関数、クラス、規約の集合である。 一般的に、Web開発を目的とするフレームワークは少なくとも「ルーティング」「オブジェクト関係マッピング」「ユーザ管理」のタスクを行うための標準的な手段を提供する。 Laravel、Symfony、Zend FrameworkはいずれもオープンソースのPHPフレームワークである。 Laravel、Symfony、Zend Frameworkのテンプレート言語は、左から順にTwig、Blade、PHPである。 Laravel、Symfony、Zend Frameworkはいずれもルーティングをサポートしている。 39. コマンドライン上で「php zipcode.php 1000004」を実行したときに、以下の実行結果結果を得たい。コードの【A】に入るものとして正しいものはどれか。 [ 実行結果 ]1000004 [ コード ]$zipcode = 【A】;print $zipcode; $_SERVER['argv'][0] $_SERVER['args'][0] $_SERVER['argv'][1] $_SERVER['args'][1] $_SERVER['arg'][0] 40. 文字列をutf-8で出力したい場合、コードの【A】に入るものとして正しいものはどれか。 $str = "草薙沙耶";print 【A】($str, "utf-8"); str_convert mb_convert convert_str str_convert_encoding mb_convert_encoding Time's up試験は終了です。「回答を送信」ボタンを押下してください。