hiromasa.zone : o)

2007/4/30 Monday 投稿時の月齢:13.3  月名:待宵月  潮汐:大潮 Moon:13.3[待宵月]今日の心技体 : 好調期低調期好調期

wp-ohayo 1.00 リリース このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加

日記 - 晴れ ひろまさ @ 18:08

連動企画? というわけで、プログラムの解説しながらプラグインをつくってみましたのでリリースします。 🙂

WordPress Plugins/JSeries ≫ wp-ohayo

コメントや投稿の”時間”をお日様などのイメージに置き換えます。

PHP で遊ぼう(7) – if と 変数だけでプラグインをつくる

簡単なプログラムもデータによっては結構楽しくなります。 というわけで次のエントリでこのプラグインの 1.00 の紹介を。 🙂

wp-ohayou

というプラグインです。 むかし、Masayan さんが同様のものをいれられていたような気もするのですが、つくっちゃえということで作りました。

なんと、Mie さんお手製アイコン付です。 かわいい。。 ありがとう。 🙂

前のエントリのオリジナルプログラムは単純に文字列だすだけでしたが、このように WP のプラグインにしたり画像入れるとなんだか楽しいものにかわります。

wp-ohayo は簡単なプログラムで、fillter 系の雛形にできると思いますのでどんどん改造してみてください。 🙂

(もっというと、これは実はwp-modore の改造でつくるのに 15 分もかかってないです。。(笑)

PHP で遊ぼう(7) – if と 変数だけでプラグインをつくる このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加

日記 - 晴れ ひろまさ @ 17:46

いやぁ、、ずいぶん間が空いてしまいました。 すいません。。 というわけで、前回。

PHP で遊ぼう(6) – if と 変数と

では今回の例題カードならべかえの3枚版を。 $center が真ん中です。 😛

ということで、if と変数をつかって2枚のカードのならべかえをやってみました。 if は式を評価して、プログラムを分岐させる構文でした。 比較演算子と呼ばれるのが、 == とか < とか > で、これは2項演算子といい、両辺に書いた2つの変数や数字を比較できます。

2項ということで、2枚のカード(変数)の比較は簡単ですが、これを3枚にしたら、、というのが最後に書いたことでした。 なんとやってくれた方が2名も!

PHPのお勉強: ifを使って3枚並び替え@naoki さん

PHP で遊ぼう(6) – if と 変数とにて、PHPで3枚の数字を並び替えについて問題があったので、やってみました。

雑念ベース ≫ PHP による並べ替え@よしともさん

ループを使うのが普通ですが、ここはあえて使わない方向で挑んで見ました。長ったらしいコードになってしまっていますが、これはいわゆるバブルソートですね。隣同士を比較して入れ替えていくというやつです。N個の場合の比較回数は N(N-1)/2 で、3(3-1)/2 = 6/2 = 3。なので3回分の if を書いています。

3つのカードが並ぶパターンを全て if で表現されているのが、naoki さん版。 一方、よしともさん版は、入れ替えをしたときに最大何回いれかえる必要があるかという観点でかかれています。

うーん、すばらしい。。 おそらくこの問題ではこの2種類の書き方に大きく別れるのではないかと思います。 ある程度一度に同時処理できる人間の考え方に近いのが naoki さん版(人間はこの if をいっきに処理できる)で、順次だけれど高速に処理できるコンピュータの特性を生かしたのがよしともさん版です。 ぜひ、みなさんもみてみてください。 🙂

というわけで、コンピュータ言語の比較の基本は2項です。 なにかとなにかが同じなのか、違うのか。 多いのか、少ないのか。 プログラムもなるべくこの形にもっていったほうが、分かりやすいし書きやすくなります。 複数の条件を比べる場合は if を 2つつかったり、 && (アンド)や || (オア)でつなげる必要があります。

ではカードでは”数字”を比べてみましたが、他のものは比べられるのか。。 変数には数字以外にも文字列をいれることができます。 ここからがスクリプト言語の恐ろしさです。

いままでのサンプルは毎回同じ答えがでるものでした。 画面からの入力とかをやっていないので、あたりまえなのですが、これじゃー面白くないってことで…。 画面からいれなくても変わるものということで、今回は”時間”をタネにしてみます。

$time = Date('H:i');

PHP の組み込み関数というのに、Date というのがあります。 とりあえず詳細はまた。 上記のようにすると $time という変数に「24時間表記で現在の時間」がたとえば、"17:01" とかという文字列が変数に格納されます。

じゃー、これを if で比較したらどうなるのか。 朝、昼、夜でためしに比較してみましょう。

  1.  <?php
  2.  $time = Date('H:i');
  3.  
  4.  if($time >= "05:00" && $time <"10:00") {
  5.   echo "朝だよ";
  6.  }
  7.  else if ($time >= "10:00" && $time <"18:00") {
  8.   echo "昼だよ";
  9.  }
  10.  else {
  11.   echo "夜だよ";
  12.  }
  13.  ?>

なんと恐ろしいことにうまく比較できてしまいました。

まず、&& はアンドを表す演算子で、その両方の条件がそろうことを意味します。範囲を指定したい場合、このような表現になります。(数学みたいに 100 < x < 200 とかできない)

今回の文字列の比較をすんなり受け入れられる方は、まったく問題ありません。 逆に、高級言語でプログラムを書かれる方には異常に見えるかもしれません。 詳しく調べていませんがPHP の場合、文字列通しの比較を行うとおそらく設定されている文字コード順で大小比較されます。 ということで、24時間制で表現された文字列の場合、上記の if でうまく比較できます。

これがスクリプト言語の「のり」ってやつですが、とりあえずそれっぽく書いてみると大抵うごきます。 どんどんやってみてください。 :-)

さてさて、正直こんなプログラム、動かしてもつまんないわけです。 でも、つかう場所によっては面白くなるかも...! というわけで、これを WordPress のプラグインにしてみましょう。 大量のデータは、プログラムに命を与えます。

ターゲットは、ブログのコメント欄。 ここって、時間だせますが、そのまんまだすと書き込んだ時間が赤裸々に。。 気になる方もいるでしょうから、これを上の if をつかって化かしてあげるプラグインにしてみます。

WordPress のプラグインの基本的な考え方は、のっとりです。 特に画面表示系ののっとりのことを、filtter hook といいますが、簡単に言えば表示する文字列を、プラグインでうばって置き換えてしまう仕掛けです。

詳しくは、

WordPress プラグイン作成時のノウハウ - 前編 -

で、今回奪い取りたいのはコメントの時間欄。 これは、get_comment_time というフィルターでうばいとれます。 奪う、には add_filter という WP 組み込み関数を使い、処理をする自分の「関数」を指定します。

  1.  <?php
  2.  /*
  3.  Plugin Name: wp-ohayo
  4.  Plugin URI: http://wppluginsj.sourceforge.jp/wp-ohayo/
  5.  Description: converts the time of the comment into the image
  6.  Author: hiromasa
  7.  Version: 0.01
  8.  Author URI: http://zone.maple4ever.net/blog/
  9.  */
  10.  function wpohayo($time) {
  11.  
  12.   //WordPress の変数からそれぞれのコメント時間を変数 $time に取得
  13.   global $comment;
  14.   $time = mysql2date('H:i', $comment->comment_date);
  15.  
  16.   //$time の時間によって、$message にメッセージを作成
  17.   if($time >= "05:00" && $time <"10:00") {
  18.   $message = "朝だよ";
  19.   }
  20.   else if ($time >= "10:00" && $time <"17:15") {
  21.   $message = "昼だよ";
  22.   }
  23.   else {
  24.   $message = "夜だよ";
  25.   }
  26.  
  27.   //作成した $message を WordPress に返して文字を置き換える
  28.   return $message;
  29.  
  30.  }
  31.  
  32.  add_filter('get_comment_time', 'wpohayo');
  33.  ?>

一番下の行に、add_filter がみえ、get_comment_time をうばい、wpohayo という関数を指定しているのが分かります。 で、その上にあるのが実際に処理をする wpohayo 関数で先ほどの朝、昼、夜分岐が見えます。 また、コメント時刻を取得するのに WP の変数を読んでいるのが分かります。(この辺はちょっとノウハウがいりますね。 似たような処理をしているプラグインをみるのが早道です)

最初の、プログラムでは echo で画面に表示していましたが、WP のプラグインの場合、表示はせずに表示させたい文字列を return してあげます。 こうすることで、WP がその文字を表示してくれる仕掛けになっています。

wp-ohayo

というわけで、かなり駆け足でしたが if と変数だけでつくる、WordPress プラグインでした。

簡単なプログラムもデータによっては結構楽しくなります。 というわけで次のエントリでこのプラグインの 1.00 の紹介を。 :-)

2007/4/27 Friday 投稿時の月齢:10.5  月名:十日余の月  潮汐:若潮 Moon:10.5[十日余の月]今日の心技体 : 好調期低調期好調期

WordPress のデータベースチューニング このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加

日記 - 晴れ ひろまさ @ 23:27

WordPress サイトを高速化したい場合のノウハウ、という話です。 高速化にはいろいろ要素があって話が発散するので、とりあえずデータベースについて。

まず最初に。 特にレンタルサーバで表示速度が遅い場合は、大抵は MySQL の負荷だと思います。 極端な過負荷の場合は、ほぼ手が出ません。 この場合は潔くあきらめましょう。。(笑)

ここからは、ある程度速い MySQL でもうちょっと速くしたい場合の話。 といっても、ちゃんと検証したわけではないのでどの程度効果があるか分かりません。 まぁちょっとしたネタってことで。 システム開発の世界では、この手の高速化のことをパフォーマンスチューニングといいますが、機能を削らず、処理の見直しや環境の変更を行い高速化を行う手法です。

まず最初は MySQL のクエリーキャッシュから。

これは、おおざっぱにいえば、よくある問い合わせを覚えておき、次の要求に対しては実際に検索せずに前の検索結果をそのまま返すという技術です。 もちろん、UPDATE や INSERT があった場合は、この検索結果は破棄するといった処理がはいります。

WordPress のデータベース動作に関しては、ほぼ SELECT だけ。(みんながサイトを見たとき) 更新はブログマスターが記事を書いたり、読者がコメントをしたときなどのごくごく限られた場合です。 ということは、このクエリーキャッシュが思う存分効果を発揮するわけです。

実はぼくも前から気になっていたのですが、 2.0 系ではエントリを表示する際の SQL に「$now」という条件が使われています。 今の時刻を検索条件にして、それより前を表示する。(要は未来日投稿を表示しない) みないな SQL なのですが、こういう SQL だとクエリーキャッシュが対応できません。

おわかりのとおり、「今より前」なので、SQL を発行するたびに条件が変わってしまうからです。

Post Query Accelerator

WordPress’ post queries always ask for posts with post_date_gmt < = '$now' where $now is set to the current time, to prevent posts in the future from showing up. This means that $now changes with each page load. For high volume MySQL sites, the system administrator might turn on MySQL’s qcache, in order to cache some SQL queries. The problem with $now is that it changes each time, so the query is never exactly the same again, and the cache doesn’t help.

ということで、2.0 系に関しては発行する SQL をのっとってキャッシュしやすいように書き換えてくれるプラグインもあるようです。 ただ、共有 MySQL サーバ場合のクエリーキャッシュがどのように分配されるのかぼくは知りません。。 なので効果も分かりません。 MySQL に詳しい方教えてください… 🙂

ちなみに、2.1 系はこのクエリーを使っていません。 wp-cron で真の未来日投稿ができるようになったので、処理から全てはずされました。

では、次はインデックス。

データベースで検索をかける場合、基本的に検索対象は小さければ小さいほど速くなります。 データが多い場合はもちろんどんどん遅くなっていくわけですが、これを改善させようというデータベース技術にインデックスというのがあります。 事前に対象に索引を作っておき高速に検索をしようというものです。

WordPress でも標準でいくつかインデックスはってあるんですが、もーちょっとはれないかな、と思って調べてみたところやっている方がいました。

rabich.de HowTo: WordPress-Plugin “Database Tuning”

ドイツ語なのでよく読めないのですが、 PHP をみるとインデックスはっている部分がみえました。 ためしてないのであれですが、サイトによっては高速化できるかもしれません。(DB 操作はおっかないので、自己責任で…)

というわけで、データベースチューニングの話でした。(ぼくは専門じゃないので参考までに)

人間はなぜ、かくも速さを追求するのか。 人生が倍の時間だったらいまの倍の時間、待てるか、それでもなお追い求めるのか。 遺伝子に聞いてみたいところです。

Thunderbird 2 から Google Calendar を操作する このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加

日記 - 曇のち晴(10/4) ひろまさ @ 0:00

kohaku さんが以前紹介されていました、

Sunbird と Lightning で Google Calendar at orioa

いまリリースされているバージョンでは無理なようですが、次期バージョンでは、カレンダーソフト、Sunbird と Lightning でGoogle Calendar のスケジュールが取り込み可能になるようです。

がやりたくて、いろいろためしてみました。 拡張入れるとできるようですね。 🙂

lightning

Thunderbird 2 と、そのカレンダアドオンであるlightning、それから lighning の拡張である Provider for Google Calendar を合わせてインストールすれば OK です。

カレンダーの追加部分に、「Google Calendar」の選択項目が追加されますので、ここにGoogle Calendar 設定画面から該当カレンダの iCal のアドレスをいれれば同期できます。 ちゃんと書き込み・削除もできました。 マルチバイトも問題ないようです。 🙂

ちなみに、スクリーンショットはLightning 0.5pre 2007年3月28日開発版@日本語版を使わせていただいております。 0.3 系よりオプションが多くて表示がかっこいい!。

あとは携帯電話から書ければ、、ってあれ、、最近標準でできるようになったような。。 気のせいでしたっけ?(←まったくついていっていない。 あ、GMail のはなしだっけか。(笑)

2007/4/26 Thursday 投稿時の月齢:9.4  月名:十日月  潮汐:長潮 Moon:9.4[十日月]今日の心技体 : 好調期低調期好調期

Web 2.0 サービスと BBS このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加

日記 - 雨のち曇 ひろまさ @ 21:37

風邪引き続き。。 もう、ケロケロするは(ケロヨンではない)、せきはでるはで大変困った事態であります。。

薬が効くと眠くなり、うたたねしてたらその後は眠れなくなるし…。 ということでせっかくの時間、読書を。

Webサイトを進化させる

wp-hatena を紹介していただき、記載誌をいただいておりました。 遅ればせながら紹介させていただきます。 🙂

Webサイトを進化させるWeb2.0サービス実践ガイド

Webサイトを進化させるWeb2.0サービス実践ガイド
アイティティ (著)

本書では、Part1においてフィードを使ったWebサービスの最新の情報を取り込
み方をブラウザ、RSSリーダー、パーソナライズドホームそれぞれについて解説
しています。また、Part2で写真共有サービス、Part4で動画共有サービス、
Part5で地図サービスと、Web 2.0の代表的なWebサービスを実際に利用して、ブ
ログと連携する方法を説明します。

改めてじっくり読ませ頂きましたが、各種 Web 2.0 サービスの概念、使い方、そしてその生い立ちが丁寧に書かれて、なるほど~と思うことがいくつもありました。

Web 2.0 と呼ばれているものは、技術的なものよりも、案外そのサービス思想を読み取るのが難しいです。 たとえば、「ブックマークを共有できる」という機能があるサイトをみて瞬時に、「サマリから人気のある面白いサイトをみつけられる」とか「似た趣向の人のブックマークは参考になる」などと思える人はかなり達者なひとだと思います。

「Webサイトを進化させる~」はひとつずつサービスを取り上げ、これらを解説してくれています。 Web 2.0 について、メーカの情報システム部門などで、特定の若い子はしっているけど、あとはほとんど分からない。 そういった状態があるのであれば、職場に一冊よいのではないでしょうか。

さて、2.0 といえばこれこそ 2.0 といううわさの twitter。 技術的に新しいことはなんもなく、あるのは「誰かに向けて発信しない」というだたひとつのルール。 これはノンチャットアプリケーション(!?)。  せっかくだから、Comet でも使えば面白かったのに、と思いましたがまぁリアルタイムである必要もないのか。

で、ですよ。 ちょっといじって、これって何かに似ている…。 と。 遠い昔であったことがあるような…。

ぴこん!

グッバイメッセージ

昔の草の根パソコン通信によく実装されていた、ログオフ時におくるグッバイメッセージ。(笑)

これも、だれかにあてるわけではなく、しかもみるメンバーが決まっているという仕組み。 あるいみ元祖 twitter だったのではないかと。。 ちなみに 48文字(96byte)以内。

時代は繰り返されるのか。 たしかにパソコン通信は半匿名。 Web 2.0 系も半匿名性(人をユニークに特定できる)を生かしたサービスばかりなので、似てきて当然なのかもしれません。

ということで、おかゆだべてねます。。

おかゆ

2007/4/25 Wednesday 投稿時の月齢:8.3  月名:九日月  潮汐:小潮 Moon:8.3[九日月]今日の心技体 : 好調前不安定期低調前不安定期好調期

hiromasa.zone 10 のひみつ このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加

日記 - 晴れ ひろまさ @ 18:22

hiromasa.zone 10 のひみつ。

  1. あまり知られていないが、hiromasa.zone は MMRT Dialy Life@Masayan さんの弟分サイトである。 なので USO 通信などのネタをぱくるときがある。(←おい
  2. hiromasa.zone に最初にコメントしてくれた “知らない人” は Masayan さんで、その次は yutaka さんで、3番目が kohaku さんであり、しかも今も仲がよい。 (2005/5)
  3. hiromasa.zone の WordPress 部分には Google Adsence が実は存在するが、検索エンジンからのリンクできた人にしか表示されないため、存在を知っているものは少ない。 この表示可否をきめるのに、実はSearch Word Highlight for Multibyte プラグインが使われている。(getHighlighFlag() という隠しメソッドでハイライトの状態がとれます)
  4. トップページ・ドキュメント・掲示板といったページは自作の PHP スクリプトが使われている。 当初 WordPress も Shift_JIS で動かしていたため統一されていたが、いまは UTF-8 にしてしまったため、トップが Shift_JIS 、ブログが UTF-8 とへんてこな状態になっている。
  5. hiromasa.zone はあろうことか、WordPress が 2.1 系ではなく 2.0.10 が使われている。。(時間が無くていれかえれてない。。)
  6. 実は 2.0 系がブランチしてほっとしたのはここだけのひみつである。(笑)
  7. 書いている本人は、コンピュータ系よりも、夜とか日常とかのネタ系のほうが好きなのだが、読んでもらえるのはコンピュータ系という憂鬱がある。
  8. RSS が抜粋なのは、public してからもなお記事を修正することが多いという、あほで単純な理由である。(すぐキャッシュされるんだもん) また変なタグを書いて RSS リーダに XSS でも起こしたらどうしようという不安も少しはある。(←起こすな
  9. hiromasa.zone の 1日のPV は 2000~3000 くらいであり、一番人気のあるエントリは、TortoiseSVN の使い方のエントリでトータル約2万/PV もらっている。
  10. 同居の人も読んでいるので、あぶないことがかけない。
  11. hiromasa.zone に 10番目の秘密はない。

前回はこちら。 🙂

hiromasa.zone 30 のひみつ

hiromasa.zone 30 のひみつ。

かぜひいて JavaScript。 このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加

日記 - 晴れ ひろまさ @ 17:13

こぉの忙しいときに風邪をひいてしまいました。。 職場でゴホゴホと、かなり焦っていたら、マネージャから

明日はお休み

ということで、お休み命令をもらいました。 というか頭痛がひどくてやばかったので正直かなり助かりました。。 すんません。。

とりあえず、病院にいってみたところインフルエンザではなさそうなので安静にしております。

そうこうしていたら、Amazon さんから頼んでいた本が届きました。

JavaScript

(ウンケルはかんけいない)

2000 年改版ということで、かなり古い本ですが O’REILLY の JavaScript 本。

JavaScript

おそらく、JavaScript の”文法”を書いた唯一の本だと思います。 時期が時期だけに JavaScript 1.2 系ベースですがそれでも十分。 データの型から、制御構文、プロトタイプベースのオブジェクト指向の説明まで、200ページ近くがグラマーの説明にさかれています。 すばらしい。(ちなみに、いつかでるであろう JavaScript 2.0 系からは、クラスベースのオブジェクト指向になるらしい)

ぼくらの求める情報は、租借されたものではなく、仕様書の全て + α なのですが、なかなかそういった本ってないんですよね。 四千なにがしと、高めの本ですが本気で JavaScript やる方にはお勧めです。 🙂

2007/4/24 Tuesday 投稿時の月齢:6.9  月名:七日月  潮汐:小潮 Moon:6.9[七日月]今日の心技体 : 好調前不安定期低調前不安定期好調期

Google 先生からのお手紙 このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加

日記 - 晴れ ひろまさ @ 8:47

ブログの方にはあんまりはってないので知らないかと思いますが、 hiromasa.zone にも Google Adsence があります。

お手紙

ようやく 100 ドルたまったらしく、Google さんから小切手が送られてきました。 🙂

...これどーやって換えるんだ!

むかしみたところによると、なにやら換金に 3000 円くらいかかるとかかからないとか。 とりあえずネタで銀行に突撃してみよう。。(銀行でいいんだよね??

# ちなみに小切手じゃなく、銀行振り込みにするとこんなにとられないハズです。 なんか google 小切手をみてみたかったもので…

Microsoft Silverlight 発表 このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加

日記 - 晴れ ひろまさ @ 8:04

まえにちょっと書いていた、 Micorosoft の WPF/E が、Microsoft Silverlight と名前をかえて発表されたようです。

ついに出る、Adobe Flashの対抗馬 – Microsoft Silverlight | エンタープライズ | マイコミジャーナル

15日(米国時間)、ラスベガスで開催されている2007 National Association of Broadcasters conference(NAB2007)において、Microsoftは次世代のメディア体験とリッチ・インターネット・アプリケーションの基盤となるプラットフォーム、Microsoft Silverlightの発表を行った。

記事中またあちこちのサイトで “Flash 対抗”、とあり、確かに技術的にかぶるところはありますが、もうちょっと “腹黒い” 規格のような気が。 既存の HTML をおきかえ、よりリッチな UI を簡単に構築する技術、とぼくはとらえているのですが、果たして。 HTML に “埋め込む” くらいのタマではないのは確かです。

Flash よりも使いやすいのは、記述にXAML と呼ばれる XML形式 が使える点。 一番身近な例をあげれば、 Sliverlight 対応の WordPress テーマなんていうのはたぶんすぐ作れます。 テーマに HTML を書く代わりに XAML 記述にしてテンプレートタグで値いれればいいだけだから…

ベクターもかける、HTML + CSS でむちゃしなくていい、なんていい世界じゃないですか。 🙂

いまの CMS は HTML に結構くっついちゃっているのが多いですが、こういう技術が多く出てくると単一データソースから複数のプレゼンテーションを出力できるのが一般的になる予感がします。

Silverlight が社内のイントラ系の業務アプリから浸透するのか、Amazon などの大手サイトが採用して一般化するのか、はたまたぽしゃるのかまだ予測不能ですが、いずれにしても HTML が UI の構築には無理があることは、もうみんなが思っていること。

クリエイターが自由になれる技術がでてくることを祈るばかりです。

2007/4/22 Sunday 投稿時の月齢:5.1  月名:六日月  潮汐:中潮 Moon:5.1[六日月]今日の心技体 : 低調期低調前不安定期好調前不安定期

マルチリンガルの弊害 このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加

日記 - 晴のち曇 ひろまさ @ 13:28

Web にかかわるとマルチリンガルになることが多いです。 といっても人間の言葉ではなくコンピュータ言語。

フロントは DHTML + CSS + JavaScript 、バックエンドは PHP とか。 これだけでも 4種類。 あと、SQL がはいってきたり、その他関連技術の言語がでてきたり…。

デザイナーとプログラマーの分業というのは良く聞きますが、やっぱりひとつだけ分かって、あとはまったく分からんと言うのは無理なので、結局全部かじる結果となります。

特に AJAX とかだと、上記の例は JavaScript と PHP が密になります。 で一人でいっしょに書いたりするわけですが、、いやコンピュータ言語なんかどれもいっしょなので大抵なんとかなるんですが、でも細かい仕様の差でハマることもあります。

あれ、エラーなぜかでる、、、あ変数名に $ ついてねーよ、うわ!メンバアクセスは -> かい、みたいな(笑)

まーシンタックスはいいとして、言語仕様でうっかりハマった話。

プログラム言語にはたいてい、関数という機能がついています。 関数に値を引数で渡すと答えが返ってくるという機能。 よく初心者に難しいと言われるのは、引数に”参照”を渡す場合。 オブジェクト(操作対象)を参照で渡して、関数(メソッド)に操作してもらうなんて使い方はよくやります。

PHP4 と PHP5 でこの部分の仕様が完全に違うのですが、とりあえず PHP4 で。

function hoge(&$object1) {
  $object2 = new Object2();
  $object1 = $object2;
}

こーすると、hoge に渡された $object1 は $object2 に入れ替わって戻ります。 こんなことはあんまりしないけど、サンプルってことで。

じゃー、JavaScript で同じことをかく。

function hoge(object1) {
  object2 = new Object2();
  object1 = object2;
}

しかし、JavaScript の場合これは正しく動作しません。(object1 はそのまんま)

あれー、参照渡しだからいいはずなんだけどなー、と悩む。。

ぴこん!

実は Java 系の場合、引数の参照変数に対する代入は意味を持ちません。 ポインタアドレスはその変数に渡ってくるので、もちろん該当オブジェクトの操作はできるのですが、引数の変数自体は参照ではなく値渡しなのです。 逆に PHP で引数を受け取る部分で & をつけた場合は C のポインタ渡しと同じく “引数の変数も参照”(?) です。

ちなみに、PHP5 は & をつけなくてもオブジェクトは参照で渡るように変わりましたが、この場合は Java と同じ仕様、”引数の変数自体は参照ではなく値渡し” になるようです。 & をつけた場合は、PHP4 と同様の動作です。

PHP4 ばっかりいじってたから、、

こんがらがった。

なんでこんなことがおきたかというと JavaScript で、

function hoge(array) {
  var tuika = new Array();
  tuika.push("mogemoge");
  tuika.push("hogehoge");
  // tuika を結合
  array = array.concat(tuika);
}

とかってやって、あれーー呼び元で array に tuika されん。。 って。 ハマったのです。

そもそも、concat (配列の結合) メソッドが array に対しての操作ではなく、結合された配列を “返す” って仕様が意味分からないのですが、、普通 array.concat(tuika); だけで array に追加されるだろーて。 😛

まぁまぁ文句を言ってもしょうがない。。 マルチリンガルな方は、似て非なるものにご注意ください。(こんなハマりかたするのはぼくだけか。。

このサイトについて

このブログは引っ越しを行いコンテンツはフリーズしています。hiromasa.anotherへどうぞ。

Powerd By WordPress

We (Heart) WordPress

WordPressME Logo
WordPress Plugins

ブログ内検索

Todays Popular

WordPress Ring

はてなリング - WordPress -

情報

19 queries. 0.125 seconds.

このページの先頭へ