タグ

ブックマーク / dara-j.asablo.jp (3)

  • $なし変数のカラクリと数値変換のお話: dara-j

    しつこくPHPのクサレ独特の仕様についてのエントリ。だって予想外の動作ばっかりなんですもの。 できそこない変数が文字列として解釈されるワケ 昨日のエントリの「$を付け忘れた変数が文字列として解釈される」についてだが、k_37to氏のはてブコメントに解説があった。 この場合「ijk」は定数としてパースされ、定数が存在しない場合は定数名の文字列として変換される。PHPのはまりやすい罠。 定数か! 普段は慣習的に定数を大文字で記述してるので見落としていたが、なるほど定数名は定義上先頭に「$」が付かないこと以外は変数と同じだ。 そんで、マニュアルの「定数」の項を確認すると確かに 未定義の定数を使用した場合、ちょうどstringとして コールしたかのように(CONSTANT vs "CONSTANT")、 PHPはその定数自体の名前を使用したと仮定します。 と書いてある。これで納得。つか、未定義の定

    zee8
    zee8 2008/01/20
  • PHPにおける数値と文字列のヘンな比較結果: dara-j

    0 == 'str' // true PHPSPOTでこんなエントリがあった。 PHPで、文字列と数値0の比較は等価になるようです:phpspot開発日誌 タイトルだけみたときは「0 == '0'のことか?そりゃ当然じゃん」とか思って記事を見たところ、 $a = 0; $b = 'str'; if( $a == $b ) { echo 'equal'; } else { echo 'not equal'; } なんてコードが掲載されてた。試してみると確かに「equal」と出力される。どういうこっちゃ? 仕様を調べてみる ちょっとこの現象は、どういう理屈に基づいてこうなるのかさっぱりわからないので、仕様上どうなっているのか調べてみた。 違う型同士を比較するので、暗黙の型変換が発生するだろうと思い、マニュアルの「型の相互変換」を見てみたがそれっぽいことは記述されていなかった。 このページの最後

    zee8
    zee8 2008/01/20
  • Zend Frameworkのソースを読んで思ったこと: dara-j

    まぁ、この辺りはPHPな方々には当たり前チックな話かもしらんが、Zend Frameworkのソースを読んだりしてて感心したのでいくつかメモをば。 メソッドチェーン Zend_Db_Selectのように、実行前にいくつものパラメータを与える必要があるオブジェクトはパラメータを設定するメソッドの戻り値がオブジェクト自身になっていて、メソッドチェーン(Zendは「流暢なインターフェイス」とか言ってるみたいだが)を利用できる。jQueryっぽく合理的だ。 以下はちょっとしたサンプル。Zend_Db_Selectはfrom()、join()、where()など、SQLの句に相当するメソッドを使ってSELECTクエリを構築するオブジェクト。これを使って、「SELECT id FROM bookmarks WHERE id < 100」を作る場合は、 // $db は接続済みのZend_Db_Adap

    zee8
    zee8 2007/07/18
  • 1