[PHP][event]第36回PHP勉強会@新宿御苑前に行ってきた

初めてPHP勉強会に行ってきた!
雨は降ってるし、9月なのに11月の気温だし、一歩外に出るだけで気が滅入るような天気だったけれど、それでも行って良かった。世界は勝手に広がる訳じゃないから、自分で一生懸命広げていくんだね。
今日聞いた名言は「おうちに帰ってトラックバックするまでが勉強会」、うん、良い言葉だと思うよ、本当に。

第36回PHP勉強会トライコーン株式会社 1F セミナールーム
2008年9月29日(月) 19:30-21:30


1. 19:30-19:40 自己紹介
 ・参加申し込み欄に書いてある順に自己紹介
 ・最初から居たのは17人くらい、急なキャンセルが多かったらしい(雨も気温も酷かったせいだと思う)
  *ちなみに最後は23人くらいになってた

2. 19:40-20:00 PHPerの為のEclipse(仮称)
  CakePHPとsymfonyでの開発作業レポート
  安藤祐介さん


 2-1. 導入
  ・みんなが使っているエディタは?
   *Eclipse
   *vi
   *emacs
   *さくらエディタ
   *秀丸
    →EclipseはPHPerに人気がない
  ・なぜEclipseはPHPerに人気がないのか?
   *重い
   *プラグインが多すぎて何を設定したら良いのか分からない
   *そんなに便利な気がしない

 2-2. Eclipseを使ってみて便利だったこと
  ・コードジャンプが出来る
   →使用しているクラスのソースコードに即飛べることで、「検索して」「開いて」の嵐から逃げられる
  ・構文検査をしてくれる
   →タグがおかしい、CSSがおかしい、typoなど結構有効な指摘をしてくれる
  ・入力補完をしてくれる
  ・リモートデバッグ
   →var_dumpとお別れ出来る!

 2-3. ハマるところ
  ・プロジェクトの文字コード設定をちゃんとやるべき
  ・プロジェクトの種別をPHPプロジェクトにしないと何も起きない
  ・ささいなHTMLの間違いに膨大なエラーが出る

3. 20:00-20:25 パフォーマンステスト@CakePHP
  CakePHPはどこまで軽量なのか
  安藤祐介さん@CakePHP発起人


 3-1. RADフレームワークとCakePHP
  ・Rapid Application Developmentの略
  ・プロトタイプを作って、アジャイルに開発していくことをサポートするフレームワーク全体を指す
  ・ではCakePHPには何が期待されているのか?
   *Modelの機能を中心とした高速開発
   *フレームワークそのものの軽量さ
   *動作速度の軽量さ
    →つまりRADフレームワークとしての速度ではなく、本当に動作が速いのか?という点が重要

 3-2. テストしてみた
  ・前提条件
   *稼働する環境はそれぞれに異なる
   *ボトルネックになりうる要素も多彩(ネットワーク、メモリなど原因となりうることが多く考えられる)
   *テスト対象として選ぶ実装の一般性は証明出来ない
    →その上で、symfony公式サンプル「cakeet!」の移植版をテスト対象として使ってみる
  ・テスト結果(HTML, pukiwiki, xoops, wordpress, symfony, CakePHP1.1, CakePHP1.2を比較してみた)
   *ざっくり言うと「HTML >>>>>>>>>> CakePHP1.1 > symfony > CakePHP1.2」
   *フレームワークのコストはHTMLの約10倍増し
   *APC(Alternative PHP Cache)により、速度は向上するのでぜひ入れるべき
    * 変換した結果をメモリの中にキャッシュとして保管しておき、以後同じファイルが実行された場合は、メモリから実行するのでファイル数が多ければ多いほど効果も高い
  ・結果から分かること
   *symfonyはファイル量、処理量ともに重量級
   *CakePHPはフレームワークとしては割と軽量

 3-3. おまけ
  ・最新のCakePHP.headはもうちょっと速くなっているらしい
  ・2008年10月25日(土)のCakePHPカンファレンスをよろしく

20:25-20:30 休憩

4. 20:30-20:50 Webエンジニアが知っておくべき迷惑メール対策法改正
  suzukiさん


 4-1. 特定電子メール法について
  ・略して特電法
  ・平成14年の改正で「未承諾広告※」などのルールを守れば、送って良いというルールになっていた
  ・平成20年6月、また改正が行われた

 4-2. 法改正で何が変わったのか?
  ・端的に言うと「未承諾広告超※」の終焉
   *ちなみに特定電子メール=広告、営業、宣伝の為のメール。新発売を知らせるメールや、URLだけのメール、懸賞当選をいつわるものなどを含む
  ・オプトアウト制からオプトイン制へ
   *つまり「送信後に拒否されたら今後は送らない」から「そもそも同意していない人には送れない」に変わる
   *ダブルオプトイン方式(Webで登録→確認メール→URLクリックで登録完了)を推奨
   *かつ、この時の「同意した記録」を残しておかなければならない
    * メールアドレスごとに同意の取得時期や取得方法などを記録しておく必要がある
    * 個別の記録を残しておくことが不可能な場合は、法律で指定された通りの形式で、一括の同意の記録を残しておかなければならない
  ・電気通信事業者は、送信者情報を偽ったメールの受取を拒否出来る
   *つまりISPやキャリアは
  ・新たに「架空アドレスへの送信禁止」が含まれた
   *機械的に生成したメールアドレスへの送信を禁止
   *但し、エラーアドレスが多数含まれる大量配信をしてしまうと「架空アドレスへの送信」と見なされるかも知れない
   *メールアドレスのクリーニングをせずに大量配信をすると、罰則が課せられる可能性もある
  ・罰金の増額

 4-3. つまり何をすればいいのか?
  ・メールを送る前に同意を取得しましょう
   *ダブルオプトイン方式ならばより「同意の取得」が明確で良い
  ・同意した記録を取っておきましょう
  ・エラーアドレスのクリーニングをしましょう
  ・特定商取引法も併せてチェックしておこう
   *こちらにも迷惑メール関連の記述があり、2008年に改正がされている

 4-4. これはオプトイン規制違反?
  ・名刺交換した相手のアドレスには送っても規制違反ではない
  ・企業サイトに載っているアドレスには送っても規制違反ではない

 4-5. 参考文献
  ・特定電子メールの送信の適正化などに関する法律
  ・迷惑メールへの対応の在り方に関する研究会 最終報告書(案)
  ・特定電子メールの送信などに関するガイドライン(案) PDFファイル
  ・総務省電気通信消費者情報コーナー 迷惑メール対策

20:50-21:00 休憩

5. 21:00-20:20 Mockingbirdの紹介
  sotarokさん


 5-1. Mockingbirdとは?
  ・ブラウジングを共有出来るFirefoxの拡張機能&ウェブサービス
   *MozillaJapanのインターンシップに参加していた学生4人で作った
   *これを使うことでSkypeとFirefoxの間を行ったり来たりしなくて済む(ようになるらしい、将来的に)

 5-2. 実装方法
  ・サーバサイドでCakePHPを使っている
  ・データは全てXMLでやり取りしている
   *URLの遷移のみをやり取りしているので、ログインやCookie情報の必要なページは表示出来ない

 5-3. その他宣伝
  ・nequal
   *世界を目指して躍進中
  ・PHP Framework Fight!
   *フレームワークのベンチマークを取るイベントを開催中

20:20-20:30 6. オープンソースカンファレンス2008 Tokyo/Fallのお知らせ
  LINDさん

 ・2008年10月3日(金)、4日(土)にオープンソースカンファレンス大田区産業プラザ(PiO)を実施します
 ・2日目の「勉強会の勉強会」が面白そう

20:30-20:45 7. HTML_CSS_Mobileってのを作りました
  ゆどうふさん


 7-1. モバイルサイトのCSS
  ・モバイルのCSSはなにかと大変
   *docomoは外部ファイルCSSに対応していなかったり
   *auはCSSセレクタのサポートぶりが微妙だったり
  ・これをどうやってまとめるのか?
   *キャリアごとに別のテンプレートにするとコストが高い
   *全部インラインCSSで作って1枚にまとめるとソースが酷いことになったり、キャリアごとに効果が違ったりする

 7-2. そこでHTML_CSS_Mobileを作った
   *PerlにあるHTML::DoCoMoCSSの改良移植版です
   *名前はMobileなんですが、現時点ではdocomo専用です

どれも面白かったし、「おおー」な内容だったのだけれど、個人的には4,5,6,7の内容を聞きながら何度も「これ、id:m_noriiさんに教えたい!」とか「ていうかこの場に居て欲しかった・・・」と思いました。聞きに行ってよかったー。
ちなみに「Ethna使いを本気を出したらCakeにdoctestとPEAR連携がついた haltさん」はhaltさんがいらっしゃらなかったので中止になりました。

懇親会でも、初参加ながら色んなお話が聞けて、話せて、とっても楽しかったです。
主催者のみなさま、講演者のみなさま、どうもありがとうございました。
(記載の内容で、もし間違った解釈のまま書いているものがありましたらお知らせ下さい)

テーマ : イベント・セミナー
ジャンル : コンピュータ

[Ruby][PHP]PHP使いから見たRuby - モナベアツスクリプトから分かる8つのこと

このエントリは、「[Ruby][PHP]PHP使いから見たRuby - モナベアツスクリプト」の続きです。

モナベアツスクリプトから分かる8つのことー。

4. モナベアツスクリプトから分かる8つのこと

4-1. コメントは#で始まる

  4-1-1. PHP
    ・「//」で始まる行か、「/*」と「*/」で囲まれた部分がコメント
  4-1-2. Ruby
    ・「#」で始まる行か、「=begin」と「=end」で囲まれた部分がコメント

4-2. 変数の頭に「$」は不要

  4-1. PHP
    ・変数は必ず「$」で始まる
    ・複数の単語からなる場合の命名規則は特になく、$myNameにしても$MyNameにしても$my_nameにしても構わない
    ・大文字と小文字は区別される($abcと$ABCは別の変数)
  4-2. Ruby
    ・ローカル変数の頭に「$」は不要
    ・ローカル変数は頭文字を含めて全て小文字で表記するよう、命名規則で決まっている
    ・複数の単語からなる場合は、「my_name」のように半角アンダースコアで区切る(これも命名規則で決まっている)

4-3. 繰り返しの書き方がちょっと違う

  4-3-1. PHP
    ・1から10まで数えたかったら
      for (i = 0; i < 10; i++) {
        echo i + 1;
      }
  4-3-2. Ruby
    ・1から10まで数えたかったら、for文の場合は
      for i in 1..10
        puts i
      end
    ・でもfor文よりもtimesメソッドを使うことの方が多い
     (do〜endで囲まれた部分を繰り返していて、||で囲まれたiに回数分の数値が代入される、つまり0回目なら0がiに入る)
      10.times do |i|
        puts i + 1
      end

4-4. if文の書き方もちょっと違う

  4-4-1. PHP
    ・判定文は()で括り、命令文は{}で括る
      if ($result === 1) {
        echo 'TRUE';
      } elseif ($result === 0) {
        echo 'FALSE';
      } else {
        echo '?';
      }
  4-4-2. Ruby
    ・判定文も命令文も()や{}で括らないのが基本
    ・{}で括らない代わりに、endキーワードまでが一括り
      if result == 1
        puts 'TRUE'
      elsif result == 0
        puts 'FALSE'
      else
        puts '?'
      end
    ・特にエルスイフがPHPと異なり、「elsif(eがない)」ので注意

4-5. ++や--が使えない

  4-5-1. PHP
    ・「i = i + 1」は「i++」とも表記できる
  4-5-2. Ruby
    ・「++」や「--」がないので「i++」のような表記は出来ない
    ・「i = i + 1」を少しでも省略して表記したかったら「i += 1」を用いる

4-6. 型宣言が不要

  4-6-1. PHP
    ・型の宣言は不要
    ・「a=5; a='hoge'」のように型の異なるものを、1つの変数に複数代入できる
  4-6-2. Ruby
    ・PHPと同じく型の宣言は不要
    ・「a=5; a='hoge'」のように型の異なるものを、1つの変数に複数代入できる

4-7. メソッドの呼び出し方がちょっと違う

  4-7-1. PHP
    ・「echo strval($i + 1)」のような書き方をし、「オブジェクト.メソッド」という書き方はしない
  4-7-2. Ruby
    ・「puts i.to_s」のように「オブジェクト.メソッド」という書き方をする
    ・「result = hoge_object.hogeFunction hikisuu」のように、引数には括弧をつけなくてもよく、省略できる場合はなるべく省略することが多い

4-8. 文字列の連結が.=じゃなくて+=

  4-8-1. PHP
    ・文字列の連結は「$str = 'aaa'; $str .= 'bbb'」のようにする(この場合、「echo &str」すると「aaabbb」となる)
  4-8-2. Ruby
    ・文字列の連結は「str = 'aaa'; str += 'bbb'」のようにする
    ・もしくは「<<」で繋ぐ(「[ruby]文字列の連結 - ぞえ の戯れ言」を見る限り、パフォーマンスとしては「<<」の方がずっと良いようだ)

以上、モナベアツスクリプトから分かる8つのことでした。

もともとこの、
1. [Ruby][PHP]PHP使いから見たRuby - 先ずはHelloWorldしてみる
2. [Ruby][PHP]PHP使いから見たRuby - HelloWorldから分かる8つのこと
3. [Ruby][PHP]PHP使いから見たRuby - モナベアツスクリプト
4. [Ruby][PHP]PHP使いから見たRuby - モナベアツスクリプトから分かる8つのこと
という一連のエントリは、RBCの第2回イケテルRails勉強会@東京で見た、「Java使いから見たRuby」という素晴らしい発表に感銘を受けて書き始めたものなのですが、実はいま、この学びをちょっとした形でRBCに還元することを考えています。

段取り八分、現場二分、頑張らなくては!

間違いや、書き方に不足している点がありましたらコメント欄にてご指摘下さい。
お付き合い頂き、ありがとうございました。

テーマ : プログラミング
ジャンル : コンピュータ

[Ruby][PHP]PHP使いから見たRuby - モナベアツスクリプト

このエントリは、「[Ruby][PHP]PHP使いから見たRuby - HelloWorldから分かる8つのこと」の続きです。

「RubyとPHPを比較しながら説明することで、PHP使いにRubyの楽しさを知ってもらう取っ掛かりになろう!」というのが、ここまでのエントリの趣旨です。
改めて流れを確認すると、
1. [Ruby][PHP]PHP使いから見たRuby - 先ずはHelloWorldしてみる
2. [Ruby][PHP]PHP使いから見たRuby - HelloWorldから分かる8つのこと
ときましたので、ここからは
3. [Ruby][PHP]PHP使いから見たRuby - モナベアツスクリプト
4. [Ruby][PHP]PHP使いから見たRuby - モナベアツスクリプトから分かる8つのこと
と進めていこうと思います。

アイデアの元になったのは「世界のナベアツ − 3の倍数と3がつく数字のときだけアホになります」をRubyで - I am Cruby!というエントリ。

3の倍数と3がつく数字の時はあっち向いたモナーが、そして5の倍数の時はこっち向いたモナーが喋ります。(正確には「3の倍数でも3がつく数字でもなく、且つ5の倍数だった場合」です)
それ以外の場合は、数字をただ表示するだけのシンプルな作りです。

「モナー」と「世界のナベアツ」で「モナベアツ」とは、短絡的なネーミングセンスで恐縮ですが、ではモナベアツスクリプト行ってみよー。

  3-1. PHP
    ・こんなテキストファイルを作り、sample2.phpという名前で保存
      --------------------------------------------------------------
      <?php
        // 3の倍数もしくは3がつく数字の時はこっちを向いたモナーが数字を教えてくれる
        // 3の倍数でも3がつく数字でもなくて、5の倍数の時はあっちを向いたモナーが数字を教えてくれる

        for ($i = 0; $i < 100; $i++) {

          $monaBeatsu = '';

          if (strpbrk(strval($i + 1), '3') !== false || ($i + 1) % 3 === 0) {
            $monaBeatsu = '   ∧_∧   / ̄ ̄ ̄ ̄ ̄' . "\n";
            $monaBeatsu .= '  ( ´∀`)< ' . strval($i + 1) . "\n";
            $monaBeatsu .= '  (   )  \_____' . "\n";
            $monaBeatsu .= '   | | |' . "\n";
            $monaBeatsu .= '  (__)_)';
          } elseif (($i + 1) % 5 === 0) {
            $monaBeatsu = '  ∧_∧   / ̄ ̄ ̄ ̄ ̄' . "\n";
            $monaBeatsu .= ' (    )< ' . strval($i + 1) . "\n";
            $monaBeatsu .= ' ( O ) \_____' . "\n";
            $monaBeatsu .= '  │ │ │' . "\n";
            $monaBeatsu .= ' (__(__)';
          } else {
            $monaBeatsu = $i + 1;
          }

          echo $monaBeatsu . "\n";
        }
      ?>
      --------------------------------------------------------------
    ・コマンドラインで「php sample2.php」を実行する

  3-2. Ruby
    ・こんなテキストファイルを作り、sample2.rbという名前で保存
      --------------------------------------------------------------
      # 3の倍数もしくは3がつく数字の時はこっちを向いたモナーが数字を教えてくれる
      # 3の倍数でも3がつく数字でもなくて、5の倍数の時はあっちを向いたモナーが数字を教えてくれる

      for i in 1..100

        mona_beatsu = '';

        if i.to_s["3"] != nil || (i % 3) == 0
          mona_beatsu = '   ∧_∧   / ̄ ̄ ̄ ̄ ̄' + "\n"
          mona_beatsu += '  ( ´∀`)< ' + i.to_s + "\n"
          mona_beatsu += '  (   )  \_____' + "\n"
          mona_beatsu += '   | | |' + "\n"
          mona_beatsu += '  (__)_)'
        elsif (i % 5) == 0
          mona_beatsu = '  ∧_∧   / ̄ ̄ ̄ ̄ ̄' + "\n"
          mona_beatsu += ' (    )< ' + i.to_s + "\n"
          mona_beatsu += ' ( O ) \_____' + "\n"
          mona_beatsu += '  │ │ │' + "\n"
          mona_beatsu += ' (__(__)'
        else
          mona_beatsu = i
        end

        puts mona_beatsu

      end
      --------------------------------------------------------------
    ・コマンドラインで「ruby sample2.rb」を実行する

次回は、このモナベアツスクリプトから分かる8つのことを説明します。

テーマ : プログラミング
ジャンル : コンピュータ

[Ruby][PHP]PHP使いから見たRuby - HelloWorldから分かる8つのこと

このエントリは、「[Ruby][PHP]PHP使いから見たRuby - 先ずはHelloWorldしてみる」の続きです。

HelloWorldから分かる8つのこと、行ってみよー。

2. HelloWorldから分かること

2-1. コンパイル不要

  2-1-1. PHP
    ・インタプリタ言語(実行時に自動的にコンパイルされる言語)なので、
     意識的にコンパイルする必要はない
    ・但し、敢えて事前にコンパイルすることで速度を上げる方法もある
  2-1-2. Ruby
    ・PHPと同じインタプリタ言語なので、こちらもコンパイルは不要
    ・コンパイルの手間や時間は節約できるが、エラーの原因が探しにくい
    ・パフォーマンスが悪い面もある

2-2. クラスは作成しなくても良い

  2-2-1. PHP
    ・PHP4までは基本的に手続き型の言語、クラスは作らなくても良い
    ・PHP5以降はオブジェクト指向言語のように書くことも出来る
  2-2-2. Ruby
    ・RubyはPHPと異なり、オブジェクト指向型の言語
    ・でもクラスは作らなくても良く、手続き型のように書くことも出来る

2-3. 標準出力はputs

  2-3-1. PHP
    ・PHPの標準出力は「echo」や「print」
    ・echoとprintの細かい違いについては「[PHP]echoとprintの違いを再確認」を参照
  2-3-2. Ruby
    ・Rubyの標準出力は「puts」や「print」
    ・putsとprintの細かい違いについては、「[Ruby]putsとprintの挙動の違いを確かめてみる」を参照

2-4. 文字列は「'」か「"」で囲む

  2-4-1. PHP
    ・文字列は「'」で囲っても「"」で囲っても構わない
    ・「'」で囲うと式の展開が行われないなどの違いがある
    ・この辺りの詳細は「[PHP]文字列内の変数の括り」を参照
  2-4-2. Ruby
    ・文字列は「'」で囲っても「"」で囲っても構わない
    ・「'」で囲うと式展開が行われない点など、PHPと感覚はほぼ同じ
    ・式展開を行いたい場合は、「"」で文字列全体を囲み、式展開したい箇所を「#{ }」で囲む

2-5. 式ごとの「;」は不要

  2-5-1. PHP
    ・式の終わりごとに「;」が必要
    ・書かないとどこが式の終わりだか分からなくなったPHPに
     「Parse error: parse error, unexpected ...」などと怒られる
    ・「;」で区切られていれば、「$a = 1; $b = 2;」のように1行で書いても問題ない
    ・「?>」直前の最後の行だけは、「;」がなくても大丈夫
  2-5-2. Ruby
    ・PHPとは異なり、式ごとの「;」は不要
    ・「;」の代わりに「改行」がその式の終わりを示す

2-6. ファイル名は自由

  2-6-1. PHP
    ・ファイル名は自由、拡張子は.php
  2-6-2. Ruby
    ・ファイル名は自由、拡張子は.rb

2-7. 開始と終了の宣言はない

  2-7-1. PHP
    ・最初と最後を「<?php ?>」で囲う
  2-7-2. Ruby
    ・ファイルの最初から最後までがソースなので、特に何かで囲う必要はない
    ・もしくは「__END__」という行を読み込んだ時点で終了となるので、
     その次の行以降に何か別のことを書いても構わない

2-8. 実行コマンドはruby

  2-8-1. PHP
    ・phpコマンドで、引数にファイル名を与えてやれば実行できる
  2-8-2. Ruby
    ・rubyコマンドで、引数にファイル名を与えてやれば実行できる

比較しながら書くって難しいな、でもこうして書くことで新しい発見もある。
なので、また次のエントリに続きます。

テーマ : PHP
ジャンル : コンピュータ

[Ruby][PHP]PHP使いから見たRuby - 先ずはHelloWorldしてみる

先日参加した「イケテルRails勉強会」で受けた「Java使いから見たRuby」が素晴らしかった。

以前働いていた職場で、信念のようにずっと思い続けていたことがある。
「私はここに遊びに来て、親切にしてもらい、幸せをたくさんもらった。
 だからその親切や幸せを増やして、また誰かに渡してあげたい」
RBC(RubyBuisinessCommons)に参加していて、その気持ちを思い出した。

RBCの勉強会で、Rubyは面白いって教えてもらった。
じゃあ私は、その「面白い」をもっと増やして誰かに伝えていこう。
今度は「Java使い」じゃなくて、「PHP使い」にRubyの面白さを伝えてみよう。
PHP使いの視点から、「それPHPで言うと何?」という切り口でRubyを説明してみたら、分かりやすいんじゃないかな?

これはそんな気持ちから生まれたエントリです。

という訳で、先ずは「Hello World」から行ってみよー!

1. HelloWorld

  1-1. PHP
    ・こんなテキストファイルを作り、sample1.phpという名前で保存
      <?php
        echo 'Hello World';
      ?>
    ・コマンドラインで「php sample1.php」を実行する

  1-2. Ruby
    ・こんなテキストファイルを作り、sample1.rbという名前で保存
      puts 'Hello World'
    ・コマンドラインで「ruby sample1.rb」を実行する

次回は、このHelloWorldから分かる8つのことを説明します。
たったこれだけのHelloWorldから8つも分かることがあるという不思議。

テーマ : PHP
ジャンル : コンピュータ

[PHP]echoとprintの違いを再確認

この話はPHP 4, PHP 5を前提としています。

ずっと曖昧だったechoとprintの違い。
結構「違いはない」みたいに言い切っているサイトも少なくないけれど、違いはあるようだ。
http://www.faqts.com/knowledge_base/view.phtml/aid/1/fid/40

・どちらも厳密に言えば関数ではなく言語構造
・なのでどちらも引数を括弧で括る必要はない(括弧で括っても使える)
  ○ echo 'hoge';
  ○ print 'hoge';
  ○ echo ('hoge');
  ○ print ('hoge');
・echoは戻り値を返さないが、printは常に「1」を返す
  ○ $printResult = print 'hoge';
    ($printResultには1が入る)
  × $echoResult = echo 'hoge';
    (Parse error: parse error, unexpected T_ECHOで実行できない)
・戻り値を返さない故にechoはprintと比べて僅かに早い
 (ごく僅かに、だけどそれだけを理由にechoを選ぶべきではない)
・echoは括弧をつけない場合のみ、複数のパラメータを渡せる
  ○ echo 'hoge', $a, 'fuga';
  × print 'hoge', $a, 'fuga';
  × echo ('hoge', $a, 'fuga');
  × print ('hoge', $a, 'fuga');

ちょっとすっきり、やはり何を差し置いても先ずはリファレンスだね。

テーマ : プログラミング
ジャンル : コンピュータ

[PHP]文字列内の変数の括り

この記事は「PHP4」での動作を前提としています。

◆変数の括りについて
 PHPにおいて、文字列内に変数を埋め込む場合は、文字列全体を二重引用符(")で括るのが原則です。
 単一引用符(')で括ると、変数展開は行われません。

 但し、二重引用符の内側を単一引用符で括った場合(例:"aa'$a'aa")は、
 変数展開が行われます。

◆動作例
 ●前提条件
  $a = 'あいう'; $aa = 'えお'; という変数が存在する。
  この変数を使って「aaあいうaaえおaaa」という文字列を表示したい。
 ●実行結果
 1.echo "aa$aaa$aaaaa"; は、「aa」と表示される。
  ""の間にある変数やエスケープシーケンスは、明示的な区切りが存在し、
  変数やエスケープシーケンスとして見分けがつけば自動的に変数展開される。
  見分けがつかないと無視される。(文字列としての表示すらされない)

 2.echo "aa'$a'aa'$aa'aaa"; は、「aa'あいう'aa'えお'aaa」と表示される
  ""の間にある変数やエスケープシーケンスを単一引用符(')で括ると、
  変数展開はされるが単一引用符(')自体も表示されてしまう。

 3.echo "aa{$a}aa{$aa}aaa"; は、「aaあいうaaえおaaa」と表示される
  ""の間にある変数やエスケープシーケンスを{}で括ると、変数展開される。
  括る箇所は「{$a}」でも「${a}」でも表示結果は同様。

 4.echo "aa".$a."aa".$aa."aaa"; は、「aaaあいうaaえおaaa」と表示される
  文字列結合演算子「.」で文字列を繋ぐと、変数展開される。

結論としては変数全体を「{}」で括るか、文字列結合演算子を使うと期待通りの動作をするようです。
細かすぎる話で資料が見つからなかったため、自分で検証してみました。

誤りや補足すべき点がありましたら、コメントにてご指摘頂ければ幸いです。

テーマ : PHP
ジャンル : コンピュータ

プロフィール

Author:mochiko
前職は携帯コンテンツ会社のエンジニア、現在は独立系SIerで色々。
GenesisLightningTalksのお手伝いをしたり、気になる勉強会に参加したりしつつ、毎日本を読んで過ごしています。
どれだけ本を読んでいるのか、はライトニングトークの動画を見てもらえれば・・・。

テクノラティお気に入りに追加する
はてな
mixi
SlideShare
Ustream.TV
YouTube
Wassr

最近の記事
最近のコメント
最近のトラックバック
全記事表示リンク

全ての記事を表示する

月別アーカイブ
カテゴリー
mochikoAsTechCnt
ブログ内検索
RSSフィード