パーフェクトPHP 2〜5章自作問題集

今更ですがパーフェクトPHPを読了しました。オライリーの「プログラミングPHP」よりもこっちのほうが好きになりました。

パーフェクトPHP (PERFECT SERIES 3)

パーフェクトPHP (PERFECT SERIES 3)

2〜5章は理解を確実にするために問題集を作りながら読みました。その時につくった問題を公開します。

  • 解答は載せてません。パーフェクトPHPを読んで(なければ、ぜひお買いになって)ご確認下さい。
  • あまりにも簡単すぎると感じた事柄は出題していません。
  • 記述式の問題がほとんどなので多少難しく感じることもあるかもしれません。

2章 PHPの基本

  • PHP_EOLとは?
  • PHPブロックとは?
  • PHPブロックの終了タグを省略することができるのはどのような場合においてか?
  • ライブラリやHTMLを含まないファイルでは終了タグを記述することが推奨されているか?それとも記述しないことが推奨されているか?そして、それは何故か?
  • PHPにおいて文の途中での空白、タブ、改行はどのように扱われるか。
  • PHPでのコメントの記述方法3種類を挙げよ
  • echo文での出力の特徴は?
  • phpの識別子のルールは?
  • PHPのエラーを大きく分けるとどのような分類になるか?すべて挙げよ
  • 変数がセットされているか調べるにはどうすればいいか?
  • 可変変数とは?
  • スコープとは?
  • ローカルスコープ内でグローバルスコープに定義された変数を参照するにはどうするか?
  • 定義済み定数の例を1つ挙げよ
  • スーパーグローバル変数の特徴は?
  • スーパーグローバル変数の例を挙げよ
  • 定数を定義する方法を2つ挙げよ
  • 文字列から該当する定数を取得するには?
  • マジック定数とは?
  • マジック定数を全て挙げよ
  • 発生したエラーを表示させるかどうかを制御する設定項目は何か?

3章 型と演算子

  • PHPは符号なし整数をサポートしているか?それともサポートしていないか?
  • PHP_INT_MAXを超える整数はどうなるか?
  • 整数型に明示的にキャストする方法を2つ挙げよ
  • 浮動小数点型に明示的にキャストする方法を3つ挙げよ
  • 文字列において"(ダブルクォート)が'(シングルクォート)と比べて違うところは何か?
  • ヒアドキュメントとNowdoc、変数が展開されるのはどちらか?
  • ヒアドキュメントはどのように書く?
  • Nowdocはどのように書く?
  • 文字列型への明示的なキャストをする方法を2つ書け
  • 次の例はどのように出力されるか echo 22.0;
  • PHPがfalseと判断するものを挙げよ
  • リソース型を初期化する関数を一つあげよ
  • 変数の持つリソース型の種類を調べることのできる関数は?
  • 変数がnullになる場合3つを挙げよ
  • nullの代入された変数とunset()された変数とは何が違うか
  • 自動キャストはどんな場合に発生する?
  • なるべく===または!==を使って厳密な比較を行うべきであるが、それはなぜか?
  • ある変数が特定のクラスのインスタンスであることを調べるために用いる型演算子は何か?
  • 次の表記は複合演算子の表記である。これと等しい表記のPHPプログラムを書け

$i += 1;

  • 以下のプログラム文と同じ動作をする文を三項演算子の省略記法 ?: を使って書け

$result = func() ? func() : 'hoge';

  • 以下のプログラムは三項演算子を含むPHPプログラムである。このプログラムのの出力は?

$flag1 = true;
$flag2 = false;
echo $flag1 ? 1 : $flag2 ? 2 : 0;

  • PHPにおける三項演算子は右結合か左結合か?
  • 実行演算子``の機能について述べよ
  • 実行演算子``と同じ機能をもつ関数は何か?
  • PHPの配列の特徴を3つあげよ
  • 配列のキーがセットされているか調べる方法を2つのべよ

4章 制御構造と関数

  • グループ文とは?
  • $hoge = 3という式の評価は?
  • 以下のプログラムを:とendifを使って表現せよ

if ($bool) {
echo 'hoge';
}

  • forの括弧内の3番目の式(反復式)はいつ実行されるか?
  • foreachに渡す配列の各要素の値を変更するには?
  • 関数の返り値に参照を用いるには関数の定義においてどのようにすればいいか?
  • 関数に渡す引数を参照で受け取るにはどうすればいいか?
  • 引数を参照で受け取る関数には値を渡すことができる?それともできない?
  • 返り値に参照を用いている関数は値を返すことができる?それともできない?
  • 可変関数とは?
  • 可変関数と同じようなことを実現できる関数を2つ挙げよ
  • 無名関数の主な使い道は?
  • クロージャとは?
  • 無名関数を定義する際に、関数内で利用する変数を指定してクロージャを作るために使われる構文は?
  • 言語構造が関数と違うところは?
  • 関数と言語構造、可変関数やコールバックに指定できないのはどっち?

5章 クラスとオブジェクト

  • PHPにおけるクラス名の記法の主流は?
  • 名前空間を使わない場合、名前の衝突問題を解決するためにどのような名付け方をするか?
  • オブジェクト型とは?
  • new演算子を用いてインスタンス化されたオブジェクトを変数に代入したり関数の引数に指定したりする場合、値渡しになるかそれとも参照渡しになるか?
  • オブジェクトの参照を渡すのではなくコピーしたい場合はどうすればいいか?
  • 次のアクセス修飾子とその説明を正しく組み合わせよ。

(アクセス修飾子)
private
protected
public
(説明)
自分のクラスの内側または自分のクラスを継承したクラスの内側からのみ参照・呼び出しができる
自分のクラスの内側からのみ参照・呼び出しができる
クラスの外側からでも参照・呼び出しができる

  • プロパティやメソッドの宣言時にstaticをつけるとどういうことができるか?
  • オブジェクト自身へアクセスするには何を用いるか?
  • クラス自身を表すキーワードは何か?
  • 親クラスを表すキーワードは何?
  • クラス定数を定義するためのキーワードは?
  • PHP5以降でのコンストラクタの定義の仕方は?
  • PHP4までのコンストラクタの定義の仕方は?
  • 継承に使われるキーワードは?
  • オーバーライドとは?
  • オーバーライドをできないようにするにはメソッドの宣言時にどのようにすればいいか?
  • 標準クラスとは何か?
  • 標準クラスを初期化するにはどうすればいいか?
  • 他の型からオブジェクト型にキャストするとstdClassのインスタンスになるか?
  • オブジェクト型に明示的にキャストするにはどうすればいいか?
  • 整数型や文字列型などのスカラー値をオブジェクト型にキャストしたあとに、その値にアクセスするにはどうすればいいか?
  • 配列型をオブジェクト型にキャストした場合は?
  • 抽象クラスを定義するにはなんというキーワードを使うか?
  • 抽象クラスの特徴は?
  • 抽象クラスはどのような場合に用いるか?
  • 抽象クラスを使うには?
  • 子クラスでabstructメソッドを実装する場合の条件を2つ述べよ
  • インターフェイスとは?
  • インターフェイスを定義するためには何というキーワードを使うか?
  • インターフェイスを実装しているかどうか調べる方法は?
  • マジックメソッドとは?
  • マジックメソッドにはどんなものがあるか?
  • PHPにおけるオーバーロードとは何か?
  • 遅延静的束縛とは?
  • オートロードとは?
  • __autoload()関数の欠点は?
  • 名前空間とは?
  • 名前空間の区切りにはどの文字を用いるか?
  • 名前空間を定義した場合において、グローバルな関数やクラスを参照するときには、それらをグローバルな名前空間から参照しなければならないが、どうすればいいか?
  • 非修飾名、修飾名、完全修飾名とは何か?
  • 名前空間を定義するために使うキーワードは?
  • 名前空間を定義する時に気を付けなければならないことは?
  • 名前空間の影響を受けるものを3つ挙げよ
  • 名前空間の影響を受けないものを2つ挙げよ
  • 1つのファイルに複数の名前空間を定義する方法は?
  • 別の名前空間やそれに属するクラスをインポートするには何というキーワードを使うか?
  • 別の名前空間から参照する場合やグローバルに定義されているクラスを参照する場合には、常に完全修飾名の指定をしなければならない。◯か×か?
  • グローバルな空間からは、修飾名による相対的な指定ができる。◯か×か?
  • インポートした名前空間に別名をつけるには何というキーワードを使うか?どのように使うか?
  • 動的な名前空間を使うにはどうすればいいか?
  • useによるエイリアスコンパイル時に変換される。◯か×か?
  • useによるエイリアスを動的な名前空間として利用することができないのはなぜか?
  • 例外を送出するためのキーワードは?
  • 例外を捕捉する対象の処理を指定するキーワードと例外処理の内容を指定するためのキーワードをそれぞれ答えよ
  • すべての例外の基底となるクラスは?
  • try文の途中で例外が発生した場合、以降の処理は実行されるか?それともされないか?
  • try-catch文の外部で例外が送出された場合はどういうことが起こるか?
  • PHPの標準のエラーを例外に変換するにはどうすればいいか?
  • PHP標準のエラーを例外に変換する際に用いられる例外クラスは何か?
  • PHPにおける参照(リファレンス)とは何か?
  • 参照変数に、もう一度別の変数への参照を代入した場合はどうなるか?
  • PHPでは、オブジェクトは参照でしか扱うことができない。◯か×か?
  • オブジェクトへの参照をもつ変数への参照を別の変数に代入したらどうなるか?
  • リファレンスカウントとは何か?
  • オブジェクトの寿命はいつまでか?
  • オブジェクトへの参照を持つ変数がunsetされたらどうなるか?
  • コピーオンライトとは?
  • コピーオンライトの長所とは?