黄昏より暗きもの、血の流れより赤きもの

黄昏より暗きもの、血の流れより赤きもの

自分の好きな事を好きなように書いて行きます。

Self演算子に関する問題と等価演算子(==)に関する試験問題(2012.12.9 記事一部修正)

会社の面接で出題されたプログラムの試験(PHP)の復習を以下に書きます。

問題0:クラスの基本的な意味



  1. オブジェクト指向言語における、クラス、インスタンス、メソッド、プロパテイの意味を答えよ

  2. UNIXのシェルコマンド(chmod,alias,ln,kill等)の概要又はコマンドを書け

  3. システムの負荷分散の方法を3つ以上挙げよ

という具合に試験問題が出されました。1,2に関してはインターネットで調べれば何とかなりそうです。一応1に関してはいざ説明しろと言われると難しいものです。念のためネットで調べてみた所、


  • クラス:オブジェクト指向プログラミングにおいて、データとその操作手順であるメソッドをまとめたオブジェクトの雛型を定義したもの。

  • インスタンス:オブジェクト指向プログラミングで、クラスを基にした実際の値としてのデータのこと。クラスと対比して用いられることが多く、クラスを「型」、インスタンスを「実体」として説明されることもある。

  • メソッド:オブジェクト指向プログラミングにおいて、各オブジェクトが持っている自身に対する操作

  • プロパテイ:オブジェクト指向プログラミングで使用されるオブジェクトが保持している、そのオブジェクトの性質を表すデータ。例えば、画像データのオブジェクトならば、高さや幅などのデータをプロパティとして持っている。

という具合になりました。この他FizzBuzz問題(過去記事)PHPで書かせる問題も出題されたので、解答の確認をしておいた方が良さそうです。今日はこの他自分の間違えたプログラムの問題についての解説をしていこうと思います。尚、問題の構成に一部違いが有る場合もあるのでご了承下さい。

問題1:PHPのクラスの「self」に関する問題


問:次のソースコードの実行結果を求めよ


解説


答え:98。自分が間違えたのはselfの部分でした。「self」とはカレントクラス(現在のクラス)を表し、self::$valに一番最初に格納される値は10になります。さらに一回目に呼び出すと9になり、二回目を呼び出すと、一回目の値から1減算され8になるようです。

問題2:等価演算子「==」に関する問題(→「独習PHP」P84)


問:次のソースコードの実行結果を求めよ


答えは++100100x。PHPの等価演算子「==」の場合型を無視して結果的に10ならば、trueを返します。今回の問題では、 「10 = 10x」など冒頭に数字が付くと、後の物は無視されてtrueとなります。この場合配列の10と10xのみ+に置き換わり、それ以外はそのまま出力されます。尚10だけ+としたい場合は、以下のように「10 === $val」と書き直せばよさそうです。

類題:


「===」は何をするか? 「==」がtrueを返し「===」がtrueを返さないサンプルを示せ。(「Yahoo!がPHPエンジニアを雇う時に聞く質問:Do You PHP はてな」の第8問より)

解答


「==」は文字列の冒頭に数字があれば同じ物と判定するが、「===」は二つの変数の型が一致するときのみtrueを返す。例えば、10 == '10X'では冒頭に10が一致するのでtrueとなるが、10 === '10X' ならばfalseを返す。