2013年3月6日水曜日

PHP講義メモ week-1

かくかくしかじか、学生向けにPHPを教えている。シラバスはこんな具合

今週講義した中から「(´・∀・`)ヘー」とか「マヂデ?!」とかなりそうなポイントを紹介。(§はシラバスでの位置。)

  • §1.c.a. インストールと設定
    • PHP5.4のWindows向けビルド済みバイナリーには講義時点でまだ.msiであるとかのインストーラーパッケージ存在していない。(5.3までしか無かった)
      • Windowsでやりたい学生には差し当たりインストーラーを使わせる気で居たが…
         → .zip展開してphp.exeにPATHを通すとか手作業の導入解説をする羽目に(;´∀`)
  • §2.b. 型
    • boolean型 … http://www.php.net/manual/ja/language.types.boolean.php
      • trueはechoしても"1"になるから分かるけど、falseは""(空文字列)になるから何も出力されずprintfデバッグ的な事はできません(*´ω`*)
         → 早速 var_dump と公式の関数リファレンスの引き方を教える機会に
    • integer型 … http://www.php.net/manual/ja/language.types.integer.php
      • (PHPの癖に)唐突に数学的な集合表現による解説
        → せっかくなので「集合」という用語や要素の数列の表現をコラム的にちょっと解説する機会に
      • PHPの整数リテラルは10進、16進、8進、2進を使える
         → 0b10101100とか2進の整数リテラルをPHPが使えるなんて事すっかり忘れていたさ!!(おっとっとうっかり、とちゃんと教えた訳だけど(;´Д`))
      • PHPマニュアルの整数のサイズはプラットフォームに依存しますが、 約 20 億 (32 ビット符号付) が一般的な値です。 64 ビットプラットフォームでの通常の最大値は、およそ 9*10^18 (900京) になります。という表現(;´Д`)
         → 多く人は恐らく誤解するコレ。PHPとプラットフォームについてアレコレ解説する機会に
        • Windows7(x64)を使っていた学生たちにPHP_INT_SIZEやPHP_INT_MAXを確認させ、これはつまりPHPそのもののCでできたソースコードをコンパイルした処理系のint型の扱いによる事や、C系言語のchar, short, int, long longの現状や処理系依存や歴史的経緯を紹介する機会に。(OSが64bit版でもPHPのintが64bitとは限りませんのよ…)
        • 大きな整数値を扱う際の注意も解説(例: UNIX timeとか)
          • var_dump(PHP_INT_MAX) は integer型だけど、var_dump(PHP_INT_MAX+1)だとか+2だとかするとfloatに暗黙的に型変換されて丸められた値が保持される
            • +1はfloatになっても2進数的にもキリが良いから問題ないように思えるかもしれないが、+2すると何が起こるかなど確認させ、プログラマーが十分に注意して扱わなければならない事を紹介するなど
              • ついでに浮動小数点数の丸めについてなども紹介
      • ゆるふわ注意報
        • echo '123' + '456' とかキャストとPHPのゆるふわ仕様について注意喚起
こうして実際に講義しはじめると、後方互換性の維持の為とは言え、やはりPHPは滅びるべきでは…とか思いながらも、HTMLやHTTPとの連携やPHPの歴史や望まれた特性など解説に交えつつ、なぜこれほどstring型が異常なまでの暗黙の型変換の起点になっているのかや、これからもっと驚くであろうstring型の取り扱いや変換が登場する旨など解説。

ゆるふわ仕様もプロダクトをさくっと見栄えのする動作状態にすることを優先するならば、特にしっかりと勉強したプログラマーがPHPの邪悪な面も糖衣構文やそんな仕様として使いこなせるならば、それはそれで悪いばかりでもない…様には一応ポジティブにも捉えられるようには注意して学生たちには公正な立場で講義をしているつもりではあるものの…

実際使いこなすとか…、いやまあある時には使いこなせたとしても保守性や機能拡張時の安全性など…うーむ…と。

来週はfloat型の詳説から、変数、定数、演算子、制御構文、関数、もしかしたらPHPによるオブジェクトオリエンテッドプログラミングの触りくらいまでかな。後方互換性やHTML&HTTPとの親和性の為のお砂糖仕様とは言え、これからもアレコレつっこみどころ満載の予定デス(;´Д`)

0 件のコメント:

コメントを投稿