2011年7月29日金曜日

【PHP】private変数をpublic変数っぽくする

久しぶりのプログラミングネタです。
もはやグルメブログと化してます。

やりたいことはタイトルの通りで、CodeIgniterとかのフレームワークに変数をセットする際、メンバ変数にアクセスしたいと思って考えました。
まぁ、private変数をpublic変数として扱おうとしている時点で設計が間違っている気がしないでもないですが。。

さて、
PHPはオブジェクトを配列にキャストできるのですが、
http://d.hatena.ne.jp/shimooka/20071116/1195176801
こことか

この時private変数もキャストされます。ただしkeyが特殊なのでそのままではアクセスできません。
http://www.psi-net.co.jp/blog/?p=302
ここなんかわかりやすいです。



class Test{
    private $test;
    public function setTest($val) {$this->test = $val;}
}

$t = new Test();
$t->setTest("this is test");
$tArr = (array)$t; // arrayにキャスト

print_r($tArr['\000Test\000test']); // private変数にアクセス



こんな感じでアクセスできます。
しかし毎回制御文字を入力するのはめんどくさいので、keyを置換します。
むしろこっちの方がメインかもしれないですね。

keyの置換はarray_keysと、array_valuesと、array_combineを使います。



$arr = array("key1" => "val1", "key2" => "val2", "key3" => "val3");
$keys = array_keys($arr);
$vals = array_values($arr);

foreach($keys as &$key){
    $key = str_replace("key", "KEY", $key); // keyの置換preg_replaceを使ってもよい
}
$newArr = array_combine($keys, $vals); // keyを置換した配列


多次元配列の場合は再帰関数にすればうまくいくかと。


さて、タイトルのprivate変数にpublic変数っぽくアクセスする方法ですが、上の2つを組み合わせます。

class Test{
    private $test;
    public function setTest($val) {$this->test = $val;}
}

$t = new Test();
$t->setTest("this is test");
$tArr = (array)$t; // arrayにキャスト

$keys = array_keys($tArr);
$vals = array_values($tArr);

foreach($keys as &$key){
    $key = preg_replace('/\000(.+)\000/', '', $key); // 制御文字に挟まれた部分を削除
}
$newArr = array_combine($keys, $vals); // keyを置換した配列


これでprivateの変数にもpublicっぽくアクセスできます。


上にも書きましたが、これを使うぐらいなら設計からやり直した方がよい気がしますが。
何かの役に立てば。


ではでは。


【居酒屋】金十喜II@鶴ヶ峰(2回目)

先日またまた金十喜に行ってきました。
結構行くんですがいつも写真を撮り忘れてしまうので。。

さっそく食べたものを。
岩がき

でかくて甘くておいしいです!定番ですね。

刺身3点盛り(まぐろ、うに、ぶり)
こちらも定番のお刺身です。この緑の葉っぱみたいな茎みたいなやつなんて言うんだろう?
おいしいんだけど名前がわからない。。

グラタン

これは初めて食べましたがうまい!
日本酒
ますで来ました。とっくりでくれる時もあります。
こぼれないように注ぐのを練習するとか。

パルミジャーノレジャーノのサラダ
サラダはあまり頼まないのですが、パルミジャーノにはまってるので。
もちろんうまい!

チーズちぢみ
これこそ定番メニューです。
というか、奥さんが好きで毎回頼みます。
メニューにない時もありますが、店員さんに聞いてみたら作ってくれることもあります。
(お店が混んでるときはやめた方がいいかもです)

他にもいっぱい頼んだのですが、写真をとってませんでした。

金十喜は季節によってメニューが変わるので頻繁に通っても飽きません。
お酒も豊富でかなりお気に入りのお店です。
いつも混んでるので行くときは電話で予約しておくのがよいでしょう。

また今月行こう。


評価:

味:     (4.9)うまい!おしゃれな料理も多いけど家庭の味みたい。
値段:   (3.7)そこまで安くはないかな?普通の居酒屋と同じかちょっと高いぐらい。
量:     (4.2)結構ボリューミーなものもあります。おいしいので食べ過ぎ注意!
立地:   (3.3)駅から8分ぐらい?うちからは近いんですが。
雰囲気: (4.1)店内の雰囲気はいいんですが、大体宴会が入ってるので結構騒がしいです。
サービス:(5.0)このお店ほどサービスのいいお店は知りません。


大きな地図で見る

2011年7月8日金曜日

【海鮮ランチ】海華月(かいかげつ)@青山

先日会社の同期とちょっと遠めのランチに行ってきました。
ミッドタウンから歩くこと15分ほど。路地に入ったところにおいしそうな海鮮料理屋さんを見つけました。

これでかいかげつと読むようです。



大体1000円前後で食べれます。

頼んだのはこちらの海鮮丼(大盛り)

すごい量です。。しかもこれ、上げ底ではなくごはんがぎっしり詰まってます。

味も量もかなり満足できました。
贅沢なランチを楽しめました。


評価:

味:     (4.5)うまい!季節によって変わるのかなぁ
値段:   (3.4)安くはない。が値段相応のものが出てきます。
量:     (4.8)大盛りにだと食べきれない可能性も!
立地:   (3.5)ミッドから歩くと若干遠いですね。最寄駅は乃木坂のようです。
雰囲気: (4.4)写真は撮ってませんが、店内の雰囲気は結構素敵です。
サービス:(3.8)スタンプカードがあります。雨の日だとスタンプ2倍!


2000円近くするメニューもありますが、スタンプを10個ためるとランチが大体半額になるのでお得です!通ってもいいかもしれない。

海華月(公式)


大きな地図で見る