[模擬問題] PHP7初級 – テキストと数の操作(エバンジェリスト三雲勇二からの出題)

PHP7初級試験 模擬問題 – 出題範囲: テキストと数の操作 からの出題となります。
受験を考えているあなたも、試験を合格したあなたも、ぜひチャレンジしてみてください!

目次

問題

以下のような変数が用意されています。

$a = 3;
$b = '7';
$c = '123456789';

次の選択肢のなかで、誤っているものはどれでしょう? (1つ選択)

  1. 変数は頭に $ 記号をつけ、変数名には数字とハイフンとアルファベットは使用できる。変数名の注意点として、数字は1文字目に使用できないこと、アルファベットは大文字と小文字が区別される
  2. $a.$b*$a'$a.$b*$a'"$a.$b*$a" の実行結果はすべて異なる
  3. echo --$a,$a,$a++; の実行結果は 222 であり、 実行後の $a3 のままである
  4. $c の文字列の長さを数える場合は stelen() 関数を使い、1文字取り出すには substr() 関数を使う
  5. 文字列を変数に代入するには 記号や " 記号、 <<< 記号が使用できる

解答と解説は下にスクロールしてください





























解答

正解は 1. です。

解説

1. 変数は頭に $ 記号をつけ、変数名には数字とハイフンとアルファベットは使用できる。変数名の注意点として、数字は1文字目に使用できないこと、アルファベットは大文字と小文字が区別される

変数名に使用できる文字は、数字、アンダースコア、アルファベットなどありますが、ハイフンは使用できません
また、変数名の1文字目に数字は使用できません。

変数名の主な注意点として、選択肢にもある通りです。

  • 数字は1文字目に使用できないため、 $1user というような変数名は使用できません。
  • アルファベットは大文字と小文字が区別されるため、 $abc$Abc は別の変数になります。
  • アンダースコア $a_b_c は変数名として使用できますが、 $a-b-c はハイフンが含まれるため変数名として使用できません。

2. $a.$b*$a'$a.$b*$a'"$a.$b*$a" の実行結果はすべて異なる

選択肢のとおりです。

実行結果は全て異なります。
この選択肢の重要なポイントは、すべての実行結果がイメージできていることです。

以下、実行結果を表示するコードです。

  • $a.$b*$a の実行結果:321
    演算子には優先順位が存在します。文字列演算子 . よりも算術演算子 * のほうが優先度が上になります。
    したがって、 $b*$a が先に計算され 21 の数値が返ります。このとき、文字列 $b は自動的に数値に変換され計算されます。
    最後に $a21 を文字列として結合するため 321 となります。

  • '$a.$b*$a' の実行結果:$a.$b*$a
    文字列 (文字列リテラル) を変数に代入する際に、シングルクォーテーション を使用することができます。
    で囲まれた文字列は変数も演算子もそのまま文字列として扱われますので、そのまま表示されます。

  • "$a.$b*$a" の実行結果:3.7*3
    文字列 (文字列リテラル) を変数に代入する際に、ダブルクォーテーション を使用することができます。
    で囲まれた文字列は変数や \n などのエスケープ文字の展開を行ったうえで文字列にします。
    今回の例では、 $a$b の変数が展開されて置き換わりますが、記号はそのまま表示されます。

3. echo --$a,$a,$a++; の実行結果は 222 でああり、 実行後の $a3 のままである

選択肢のとおりです。

++ を加算器 (インクリメント) といい、変数の数値を +1 します。
また、-- を減算器 (デクリメント) といい、変数の数値を -1 します。

加算器および減算器は変数の前後に書くことができます。
記載する位置により変数へ反映されるタイミンが異なります。
変数の前に書く (前置) と変数の数値を変化させたあとに変数の値を返しますが、変数の後に書く (後置) と変数を返した後に数値を変化させます。

上記の例では、各項目が次のように値が戻ります。

  • --$a : 前置減算器です。 先に変数の値を -1 したあとで変数の値を返します。$a3 から 2 に変更され、変更後に変数の値が参照されるため 2 が返ります。

  • $a : 単に変数を返します。上記の前置減算器で 2 に変更されているため 2 が返ります。

  • $a++ : 後置加算器です。先に変数の値を返すため、現在の $a の値である 2 が返ります。その後に変数の値を +1 しますので、 $a3 に変更されます。

上記の流れにより、実行結果は上記の項目が続けて表示されるので 222 となります。
また、 $a は初期値が 3 であり、実行後に 3 になるので、結果として 3 のままとなります。

4. $c の文字列の長さを数える場合は stelen() 関数を使い、1文字取り出すには substr() 関数を使う

選択肢のとおりです。

文字列の長さ (バイト数) を数えるには、 strlen() 関数を使用します。
文字数ではありませんので注意してください。
混同しやすい関数として count() 関数がありますが、こちらは主に配列やオブジェクトの要素を数えたりする関数です。

文字列から部分的な文字列を取り出すには、 substr() 関数を使用します。
引数 length1 を指定すると半角1文字を取り出すことができます。

5. 文字列を変数に代入するには 記号や " 記号、 <<< 記号が使用できる

選択肢のとおりです。

2.の選択肢でも軽く触れましたが、PHP で文字列 (文字列リテラル) を変数に代入するには下記の4パターンがあります。

  1. ' (シングルクォーテーション) で囲む :
    変数も演算子もそのまま文字列として扱われますので、そのまま表示されます。
    ただし2文字だけ \ (バックスラッシュ) でエスケープする必要がある例外があります。
    • 文字列としての ' (シングルクォーテーション) : \'
    • 文字列としての \ (バックスラッシュ) : \\

  2. (ダブルクォーテーション) で囲む :
    で囲まれた文字列は変数が展開されます。
    また、\n などの多数のエスケープ文字の展開を行ったうえで文字列にします。
    はそのまま表示されますのでエスケープする必要がありません。

  3. <<<終端ID (ヒアドキュメント) で複数行を囲む :
    複数行に渡り文字列としてそのまま表示したい場合に使われる機能です。
    こちらは " で囲んだ場合と同じく、変数の展開やエスケープ文字の展開を行います。
    終端IDの行までを文字列として認識されます。
    終端IDは任意に決めることができます。

    下記は終端IDに END を使用したヒアドキュメントの例です。 $a は展開されます。

    echo <<<END
    $a
    b
    c
    END;

  4. <<<'終端ID' (NowDoc) で複数行を囲む :
    ヒアドキュメントと同じく、複数行に渡り文字列としてそのまま表示したい場合に使われる機能です。
    ヒアドキュメントとの違いとして、こちらは ' で囲んだ場合と同じくそのままの文字列として表示されます。
    ヒアドキュメントと区別するため、終端IDを ' で囲む必要があります。

    下記は終端IDに END を使用した NowDoc の例です。 $a はそのまま文字列として扱われます。

    echo <<<‘END’
    $a
    b
    c
    END;

試験の情報

PHP7初級試験 の詳細およびキャンペーン情報はこちら
https://www.phpexam.jp/summary/novice7/

模擬問題作成及び解説

三雲 勇二
プライム・ストラテジー株式会社 所属。PHP 技術者認定機構で実施している試験 ( PHP8上級 / PHP5上級 / PHP7初級 / PHP5初級 / 徳丸実務 / 徳丸基礎 / KUSANAGI for WordPress ) 含め多数の試験に合格。ペチゾーをデスク周りにおいて日々お仕事しています。
Facebook: facebook.com/yuji.mikumo
Twitter: @maikeru

この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次